Cómo establecer la gravedad de forma programática en un relativelayout

Cómo establecer la gravedad en la programación en un relativelayout. Tengo una disposición de XML con el nombre chat_viewer_message.xml como abajo:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="4dip" android:paddingBottom="4dip" android:gravity="left" android:background="@drawable/chat_bg_in"> <ImageView android:id="@+id/avatar" android:layout_width="32dip" android:layout_height="32dip" android:layout_marginLeft="4dip" android:src="@drawable/avatar_1_1" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/avatar" android:paddingLeft="4dip" /> </RelativeLayout> 

Y la vista de código en la programación es la siguiente:

 @Override public View getView(int position, View convertView, ViewGroup parent) { final int type = getItemViewType(position); final View view; if (convertView == null) { final int resource = R.layout.chat_viewer_message; view = activity.getLayoutInflater() .inflate(resource, parent, false); if (type == TYPE_MESSAGE) ((TextView) view.findViewById(R.id.text)).setTextAppearance( activity, appearanceStyle); } else view = convertView; final MessageItem messageItem = (MessageItem) getItem(position); String name; final String account = messageItem.getChat().getAccount(); final String user = messageItem.getChat().getUser(); final String resource = messageItem.getResource(); final boolean incoming = messageItem.isIncoming(); final String server_host = view.getResources().getString( R.string.server_host); if (isMUC) { name = resource; } if (incoming) { view.setBackgroundResource(R.drawable.chat_bg_in); } else { // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS view.setBackgroundResource(R.drawable.chat_bg_out); } return view; } 

Vea la gravedad en el relativelayout con id = fondo, la gravedad por defecto es LEFT, Así que quiero que si! Entrando el valor de la gravedad en relativelayout estar a la derecha en lugar de la izquierda.

Gracias.

Cast view a disposición del contenedor, en este caso RelativeLayout , y utilizar setGravity(int) en él:

 if (incoming) { view.setBackgroundResource(R.drawable.chat_bg_in); } else { // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS view.setBackgroundResource(R.drawable.chat_bg_out); ((RelativeLayout) view).setGravity(Gravity.RIGHT); } 

Una palabra de precaución (de los documentos):

Tenga en cuenta que dado que RelativeLayout considera que el posicionamiento de cada uno de los parientes entre sí es significativo, establecer la gravedad afectará el posicionamiento de todos los niños como una sola unidad dentro del padre. Esto sucede después de que los niños han estado relativamente posicionados.

Hay dos formas principales de establecer la gravedad mediante programación en un RelativeLayout . Puede establecer la gravedad para todas las vistas secundarias ( setGravity(int) ) o establecer la gravedad individualmente ( params.addRule(int) ). Nota: Estos métodos no están disponibles para LinearLayout s.

Para establecer la gravedad de todos los niños:

 RelativeLayout relativeLayout = findViewById(R.id.myRelativeLaout); relativeLayout.setGravity(Gravity.CENTER); 

Para establecer la gravedad de una sola vista dentro de un RelativeLayout :

 MyView myView = findViewById(R.id.myView); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); myView.setLayoutParams(params); 

Fuentes:

  • RelativeLayout.setGravity (int)
  • RelativeLayout.LayoutParams.addRule (int)
  • RelativeLayout.LayoutParams.removeRule (int)

Funciona perfectamente para mi caso:

  RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); layoutParams.topMargin = 700;//in my case layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);//in my case varButton.setLayoutParams(layoutParams); 

Puedes usar:

 RelativeLayout.LayoutParams paramas = new RelativeLayout.LayoutParams(); params.gravity = Gravity.RIGHT; view.setLayoutParams(params); 

Para obtener más información sobre los parámetros de gravedad u puede comprobar esto: Gravity

Utilice el método, setGravity (int) http://developer.android.com/reference/android/widget/RelativeLayout.html#setGravity(int)

Es mejor manera de establecer la gravedad del niño usando RelativeLayout.LayoutParams. Mira esto. Cómo establecer mediante programación el atributo layout_align_parent_right de un botón en Disposición relativa?

Construir el diseño del chat y manipularlo de forma programática y sDirectionHasmap contiene la dirección de cada mensaje.

 if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) { holder.messageLayout.setGravity(Gravity.LEFT); } else { holder.messageLayout.setGravity(Gravity.RIGHT); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.