web-dev-qa-db-ja.com

Android RelativeLayoutはプログラムで「centerInParent」を設定します

RelativeLayoutがあります:

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

positiveButtonにプログラム的に設定できるようにしたい:

Android:layout_centerInParent="true"

これをプログラムで作成するにはどうすればよいですか?

128
Alin

完全にテストされていませんが、これはshould動作します:

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"を追加します

379
Reuben Scratton

Reuben応答から別のフレーバーを追加するために、次のように使用して、条件に応じてこのルールを追加または削除します。

    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