Android 4.2 RadioButton android: drawableLeft error?

Android 4.2 no muestra RadioButton correctamente cuando android: drawableLeft se utiliza. DrawableRight está bien.

El dibujable en el lado izquierdo se superpone al gráfico del botón de radio. Y al menos Android 2.2-4.1 parecen estar bien con drawableLeft.

¿Usted sabe sobre la solución para esto? El ajuste de drawableLeft por programa no funcionó para resolver este problema.

4.2 Edición de Android

4.2 emisión

4.1 Android hace esto correctamente (también al menos Android 2.2-4.0 hacer esto correctamente también)

4.1 es correcto

El código de diseño XML de Android para esto:

<RadioButton android:id="@+id/radio_cloud_dropbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:drawableLeft="@drawable/dropbox_logo" android:checked="true" android:text="@string/lbl_cloud_dropbox" /> 

Puede utilizar en el botón de opción:

Ajuste el botón @null y el conjunto de izquierda dibujable que su botón:

  <RadioGroup android:id="@+id/hn_radio_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <RadioButton android:id="@+id/rb_Select_by_proposal" style="@style/RadioButtonText" android:checked="true" android:tag="1" android:text="@string/select_by_proposal" /> <RadioButton android:id="@+id/rb_Select_by_first_letter" style="@style/RadioButtonText" android:tag="2" android:text="@string/select_by_first_letter" /> </RadioGroup> 

Y este el estilo:

 <style name="RadioButtonText"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:button">@null</item> <item name="android:drawableLeft">@drawable/radio_selector</item> <item name="android:drawablePadding">10dp</item> </style> 

Para el espacio entre el botón y el uso del texto en:

  <item name="android:drawablePadding">10dp</item> 

Es probable que sea un producto del nuevo soporte de dirección de diseño que se agregó a la plataforma en Android 4.2 (es decir, para soportar el diseño de izquierda a derecha o de derecha a izquierda). Esto afecta la forma en que colocan el contenido extraíble izquierdo vs. derecho. ¿Cuál es el atributo de manifiesto android:targetSdkVersion establecido en? Técnicamente, creo, si se establece en 16 o por debajo de estos cambios de diseño se debe desactivar de forma predeterminada, incluso si su configuración regional de otro modo permitir.

Yo recomendaría archivar un error en http://b.android.com , porque en modo RTL esperaría que el botón dibujable para estar en el otro lado también. Mientras tanto, puede intentar forzar la dirección de diseño agregando un atributo layoutDirection a su TextView y forzándolo a que sea LTR para que se vea como se espera. También puede llamar a esto desde el código Java con setLayoutDirection()

Mi solución temporal a este error era reemplazar el diseño de RadioGroup padre por TableLayout con TableRow (s) que contiene RadioButton y TextView . Aunque hay otras soluciones también.

 <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TableRow android:onClick="onDropboxClick" > <RadioButton android:id="@+id/radio_cloud_dropbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:onClick="onDropboxClick" /> <TextView android:drawableLeft="@drawable/cloud_logo_dropbox" android:gravity="center_vertical" android:text="Dropbox" /> </TableRow> <TableRow android:onClick="onGoogleDriveClick" > <RadioButton android:id="@+id/radio_cloud_google_drive" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:onClick="onGoogleDriveClick" /> <TextView android:drawableLeft="@drawable/cloud_logo_google_drive" android:gravity="center_vertical" android:text="Google Drive" /> </TableRow> </TableLayout> 

Sin embargo, como RadioGroup no se pudo utilizar con diseños anidados, la selección / deselección del estado marcado debe realizarse manualmente en la actividad asociada en los métodos del controlador de eventos:

 public void onDropboxClick(View view) { checkRadio(R.id.radio_cloud_dropbox); } public void onGoogleDriveClick(View view) { checkRadio(R.id.radio_cloud_google_drive); } private void checkRadio(int radioId) { if (radioId == R.id.radio_cloud_dropbox) { dropboxRadio.setChecked(true); googleDriveRadio.setChecked(false); } else if (radioId == R.id.radio_cloud_google_drive) { dropboxRadio.setChecked(false); googleDriveRadio.setChecked(true); } } 

Esto parece estar arreglado en Android 4.2.2.

  • Mostrar texto en la parte inferior de RadioButton con imagen en Android
  • Cómo configurar un botón de radio en Android
  • Puede cambiar el tipo de fuente de un Edittext, un botón de radio y un CheckBox en Android
  • Selector textColor de RadioButton de Android
  • Utilizar imagen en RadioButton en lugar de texto
  • Aplicación de un tema a los botones de radio dinámicos en Android
  • Quitar RadioButton Icono de Android
  • Estilo de fondo del botón de radio de Android cuando está seleccionado
  • Comportamiento inesperado de RadioButton
  • Desmarcando un botón de radio
  • La selección de al menos un botón de radio se selecciona de cada grupo de radio en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.