studio linearlayout layout_below ejemplos constraint bottom below android android-layout relativelayout

linearlayout - Android RelativeLayout programmatically establece centerInParent



relativelayout below (3)

Tengo una relación relativa como esta:

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

Quiero poder programar programáticamente para positiveButton el mismo efecto que:

android:layout_centerInParent="true"

¿Cómo puedo hacer esto programáticamente?


Completamente no probado, pero esto debería funcionar:

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

agrega android:configChanges="orientation|screenSize" dentro de tu actividad en tu manifiesto


He hecho por

1. centerInParent

2. centerHorizontal

3. centerVertical

con verdadero y falso .

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

Cómo llamar al método:

centerInParent - verdadero

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, true);

centerInParent - falso

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, false);

centroHorizontal - verdadero

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, true);

centerHorizontal - falso

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, false);

centerVertical - verdadero

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, true);

centerVertical - falso

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, false);

Espero que esto te ayude.


Solo para agregar otro sabor de la respuesta de Rubén, lo uso así para agregar o eliminar esta regla de acuerdo con una condición:

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