Android RelativeLayout programlı olarak “centerInParent” ı ayarlayın


139

Ben böyle bir RelativeLayout var :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip">

    <Button
        android:id="@+id/negativeButton"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textColor="#ffffff"
        android:layout_alignParentLeft="true"
        android:background="@drawable/black_menu_button"
        android:layout_marginLeft="5dip"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/> 

    <Button
        android:id="@+id/positiveButton"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textColor="#ffffff"
        android:layout_alignParentRight="true"
        android:background="@drawable/blue_menu_button"
        android:layout_marginRight="5dip"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>

Programlı positiveButtonolarak aynı etki için programlanabilir ayarlamak istiyorum :

android:layout_centerInParent="true"

Bunu programlı olarak nasıl yapabilirim?

Yanıtlar:


401

Tamamen denenmemiş, ama bu olmalıdır çalışır:

View positiveButton = findViewById(R.id.positiveButton);
RelativeLayout.LayoutParams layoutParams = 
    (RelativeLayout.LayoutParams)positiveButton.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
positiveButton.setLayoutParams(layoutParams);

android:configChanges="orientation|screenSize"manifestinizde faaliyetinizin içine ekleyin


5
Bu işe yaradı, ama sadece layoutParams.addRule (RelativeLayout.ALIGN_PARENT_RIGHT, 0) indeksledikten sonra; üst kuralda merkezden önce. Teşekkür ederim.
Alin

9
Bunun benim için de işe yaradığını eklemek istiyorum, ancak layoutParams.addRule (RelativeLayout.CENTER_IN_PARENT, 0); to layoutParams.addRule (RelativeLayout.CENTER_IN_PARENT, -1); benim durumumda. Uygulamanız "çapa" alanında farklı bir değer gerektirebilir.
Ben Mc

7
tutturma alanı değeri şu anda doğru olduğunu belirtmek için 0 dışında bir şey olabilir . Kaynak, if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_HORIZONTAL] != 0) {nerede 0etkili bir şekilde değerlendirilir gibi karşılaştırmalar vardırfalse
Dori

2
Takip eden bir soru olarak bu cevaptaki kodun animasyonlarda kullanılıp kullanılamayacağını bilen var mı? Örneğin canlandırılır için gibi bir göreli bir görüntü vb mesafesinde merkezi bir konumda ofset sol
Jonny

27
Sadece layoutParams.addRule (RelativeLayout.CENTER_IN_PARENT) kullanabilirsiniz, belgelere
bakabileceğiniz

14

Sadece Reuben yanıtından başka bir lezzet eklemek için, bu kuralı bir koşula göre eklemek veya kaldırmak için bu şekilde kullanıyorum:

    RelativeLayout.LayoutParams layoutParams =
            (RelativeLayout.LayoutParams) holder.txtGuestName.getLayoutParams();

    if (SOMETHING_THAT_WOULD_LIKE_YOU_TO_CHECK) {
        // if true center text:
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        holder.txtGuestName.setLayoutParams(layoutParams);
    } else {
        // if false remove center:
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 0);
        holder.txtGuestName.setLayoutParams(layoutParams);
    }

3
Bir kuralı kaldırmanın en iyi yolu şudur: layoutParams.removeRule (RelativeLayout. CENTER_IN_PARENT);
Zahid Rasheed

5

İçin yaptım

1. centerInParent

2. merkez

3. merkezDikey

ile gerçek ve sahte .

private void addOrRemoveProperty(View view, int property, boolean flag){
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
    if(flag){
        layoutParams.addRule(property);
    }else {
        layoutParams.removeRule(property);
    }
    view.setLayoutParams(layoutParams);
}

Arama yöntemi:

centerInParent - doğru

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, true);

centerInParent - yanlış

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, false);

centerHorizontal - doğru

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, true);

centerHorizontal - yanlış

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, false);

centerVertical - doğru

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, true);

centerVertical - yanlış

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, false);

Umarım bu sana yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.