web-dev-qa-db-fra.com

Android RelativeLayout défini par programme "centerInParent"

J'ai un RelativeLayout comme ceci:

<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>

Je veux pouvoir programmer par programmation pour positiveButton le même effet que:

Android:layout_centerInParent="true"

Comment puis-je faire cela par programmation?

128
Alin

Complètement non testé, mais ceci devrait fonctionne:

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

ajouter Android:configChanges="orientation|screenSize" à l'intérieur de votre activité dans votre manifeste

379
Reuben Scratton

Juste pour ajouter une autre saveur de la réponse de Reuben, je l’utilise comme ceci pour ajouter ou supprimer cette règle selon une condition:

    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);
    }
12
Juancho