Cambiar mediante programación RelativeLayout toRightOf to toLeftOf

Hago una aplicación de chat Quiero poner timestamp además de la burbuja de chat. Los mensajes se alinearán a la izquierda (para el recibido) y al derecho (para el enviado).

Por lo tanto, estoy buscando una manera de cambiar toLeftOf to toRightOf . Por ahora, se ve así:

Timestamp alineado incorrectamente

Aquí está mi código XML para cada mensaje (tengo ArrayAdapter que manejar esto)

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/wrapper" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/bubble" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" /> <TextView android:id="@+id/timeStamp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/bubble" /> </RelativeLayout> 

Yo googling alrededor y encontré esto, pero no funciona:

 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); if(isReceivedMessage){ params.addRule(RelativeLayout.RIGHT_OF, R.id.bubble); } else{ params.addRule(RelativeLayout.LEFT_OF, R.id.bubble); } timeStampTextView.setLayoutParams(params); 

¿Alguna solución? Gracias

Volver a escribir
Elimine el atributo layout_toRightOf del layout_toRightOf actual y, a continuación, cree dos LayoutParams diferentes: uno para toRightOf y otro para toLeftOf . Puede cambiar los parámetros según sus necesidades.

Una alternativa es utilizar un adaptador personalizado con dos diseños. Este enfoque debería ser más rápido ya que no está reorganizando el diseño en tiempo de ejecución pero manteniendo dos listas separadas de "Responder" y "Enviar" diseños en el reciclador de vistas.

(Como nota, la API 17 introdujo removeRule() pero esto no ayudará todavía.)

Pruebe esto para quitar la propiedad toRightOf y toLeftOf de cualquier vista. Estoy quitando estas propiedades de textview.

  TextView header2=(TextView) findViewById(R.id.text_view_header_shoppinglist); RelativeLayout.LayoutParams mLayoutParams2=(RelativeLayout.LayoutParams)header2.getLayoutParams(); mLayoutParams2.addRule(RelativeLayout.LEFT_OF,0); mLayoutParams2.addRule(RelativeLayout.RIGHT_OF,0); 

Utilice por favor debajo del código.

 RelativeLayout wrapper = (RelativeLayout) findViewById(R.id.wrapper); if(isReceivedMessage){ wrapper.setGravity(Gravity.RIGHT); } else{ wrapper.setGravity(Gravity.LEFT); } 
  • Disposición de Android con ListView entre una "barra superior" y "barra inferior"
  • LinearLayout vs RelativeLayout
  • RelativeLayout Scrollable
  • No se puede cambiar el tamaño de RelativeLayout dentro de ScrollView para llenar toda la pantalla
  • ImageView rellena el ancho o altura de los padres, pero mantiene la relación de aspecto
  • Agregar dinámicamente vista a la parte inferior de RelativeLayout
  • ScrollView no está jugando bien con RelativeLayout
  • "FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS" afecta a getRootView (). GetHeight ()
  • Anula la onMeasure () de RelativeLayout para restringir su relación de aspecto
  • ¿Diferencia entre el marco y el diseño relativo?
  • La regla relativa de RelativeLayout "RelativeLayout.LEFT_OF" no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.