2010-01-25 30 views
58

¿Es posible agregar un poco de espacio entre un RadioButton y la etiqueta sin dejar de usar los componentes incorporados de Android? Por defecto, el texto se ve un poco arrugado.¿Agregar margen entre un RadioButton y su etiqueta en Android?

<RadioButton android:id="@+id/rb1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="My Text"/> 

he intentado un par de cosas:

  1. Especificación de margen y el relleno parecen añadir espacio alrededor de todo el elemento (botón y el texto, juntos). Eso tiene sentido, pero no hace lo que necesito.

  2. Creación de un dibujable personalizado a través de XML que especifica imágenes para los estados marcados y no comprobados, y luego agregue algunos píxeles adicionales a la derecha de cada imagen. Esto debería funcionar, pero ahora estás saliendo de la interfaz de usuario predeterminada. (No es el fin del mundo, pero no es ideal)

  3. Agregue espacios en blanco adicionales al principio de cada etiqueta. Android parece recortar un personaje principal del espacio, como en "Mi cadena", pero especificando unicode U + 00A0, como en "\ u00A0My String" hace el truco. Esto funciona, pero parece un poco sucio.

¿Alguna mejor solución?

Respuesta

5

No se puede intentar esto ahora para verificar, pero ¿ha intentado ver si el atributo android:drawablePadding hace lo que necesita?

+1

Hm. Lo intenté y no parece tener ningún efecto en esta situación. Gracias por la sugerencia, sin duda suena a partir de la descripción: "El relleno entre los dibujables y el texto". – allclaws

56

No estoy seguro si esto va a arreglar el problema, pero ¿ha tratado de Radio botón "relleno a la izquierda" propiedad con un valor de 50dip o más

+1

Esto funciona, y se necesitan 50 copias para cubrir el ancho del dibujo por defecto. ¡Al principio usé 20dip y el texto se movió hacia la izquierda! Eso es porque el punto de anclaje no es el borde derecho del dibujante; es el borde izquierdo del dibujable. –

+1

Esta solución parece funcionar –

0

He tratado, "android: paddingLeft" hará obras. paddingLeft solo impactará el texto mientras mantiene la imagen de la radio en su posición original.

51

He intentado varias formas y terminó con éste funciona correctamente tanto en emulador y dispositivos:

<RadioButton 
     android:background="@android:color/transparent" 
     android:button="@null" 
     android:drawableLeft="@drawable/your_own_selector" 
     android:drawablePadding="@dimen/your_spacing" /> 
  • androide: Fondo tiene que ser transparente como parece en api10 hay un fondo con intrínseca los acolchados (no trataban con otros apis pero la solución funciona en otros también)
  • androide: botón tiene que ser nula como rellenos no funcionará correctamente othe rwise
  • androide: drawableLeft debe especificarse en lugar de androide: Botón
  • androide: drawablePadding es el espacio que será entre su estirable y su texto
+4

¡La mejor respuesta! También puede configurar android: background = "@ null" y se verá como usted indicó sin relleno. – saiyancoder

+2

cuando estoy configurando android: button = "@ null", el botón de opción no se marca (hace clic). Estoy haciendo algo mal. por favor ayuda http: // stackoverflow.com/questions/28052820/android-custom-radio-button-not-getting-checked –

+0

@Shirish esta solución no tiene nada que ver con que no se haga clic en su botón. Acabo de implementarlo y se hace clic. – Yar

0

El "android: paddingLeft "solo parece funcionar correctamente en Android 4.2.2

He probado casi todas las versiones de Android y solo funciona en la versión 4.2.2.

87

Para cualquiera que lea esto ahora. La respuesta aceptada dará lugar a algunos problemas de diseño en aplicaciones más nuevas que causan demasiado relleno.

En API < = 16 puede configurar el relleno a la izquierda en el botón de radio para establecer el relleno relativo a los límites de vista del botón de opción. Además, un fondo de parche nueve también cambia los límites de vista relativos a la vista.

En la API 17, el margen izquierdo se relaciona con el botón de radio dibujable. Lo mismo se aplica al sobre un parche nueve. Para ilustrar mejor las diferencias de relleno, consulte la captura de pantalla adjunta.

Si explora el código, encontrará un nuevo método en la API 17 llamado getHorizontalOffsetForDrawables. Se utiliza este método cuando se calcula el margen izquierdo para un botón de opción (de ahí el espacio adicional ilustrado en la imagen).

TL; DR Usted debe tener estilo de botón de radio para el SDK min usted está apoyando y otro estilo para api 17+

combine screen shots showing left padding differences between api versions

+2

api 17 es android.os.Build.VERSION_CODES.JELLY_BEAN_MR1 – KarenAnne

+10

La mejor manera de hacerlo es con un directorio "values-v17"; pon tu dimensión API 17+ en un xml de recursos allí y la estándar para 16 y abajo en simples "valores". – akent

+12

Es sorprendente cómo los desarrolladores/administración de Google nos están tratando a nosotros los desarrolladores habituales. Hacen lo que quieren, cuando lo desean. La consistencia y la integridad no significan nada para ellos. – Yar

-1

estoy usando enfoque diferente que creo que debería funcionar en toda la API versiones. En lugar de aplicar el acolchado que estoy añadiendo una vista a vacío entre RadioButtons:

<View 
     android:layout_width="20dp" 
     android:layout_height="1dp" /> 

Esto debería darle 20dp relleno.

4
final float scale = this.getResources().getDisplayMetrics().density; 
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f), 

    checkBox.getPaddingTop(), 
    checkBox.getPaddingRight(), 
    checkBox.getPaddingBottom()); 
1

El relleno entre las dibujables y el texto. Se logrará agregando la siguiente línea en el archivo xml. android:drawablePadding="@dimen/10dp"

+0

estaba buscando exactamente esto ... me ayudó mucho –

+0

'@ dimen/10dp' mala práctica –

22

Añadir margen entre un botón de radio su etiqueta por paddingLeft:

android:paddingLeft="10dip" 

acaba de establecer el relleno de encargo .

propiedad xml de RadioButton.

<RadioButton 
    android:id="@+id/radHighest" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:button="@drawable/YourImageResource" 
    android:drawablePadding="50dp" 
    android:paddingLeft="10dip" 
    android:text="@string/txt_my_text" 
    android:textSize="12sp" /> 

Hecho

0

vine aquí en busca de una respuesta y la forma más sencilla (después de pensar un poco) era poner distancia en el comienzo de la propia etiqueta como tal

<RadioGroup 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignRight="@+id/btnChangeMode" 
    android:layout_marginTop="10dp" 
    android:layout_marginBottom="10dp" 
    android:layout_below="@+id/view3" 
    android:gravity="center|left" 
    android:id="@+id/ledRadioGroup"> 
<RadioButton 
     android:button="@drawable/custom_radio_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" On" 
     android:layout_marginRight="6dp" 
     android:id="@+id/ledon" 
     android:textColor="@color/white" /> 
<RadioButton 
     android:button="@drawable/custom_radio_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" Off" 
     android:layout_marginLeft="6dp" 
     android:id="@+id/ledoff" 
     android:textColor="@color/white" /> 
0

de me funciona:

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_checked="true"> 
      <layer-list> 
       <item android:right="5dp"> 
        <shape android:paddingLeft="5dp" android:shape="oval"> 
        <size android:width="20dp" android:height="20dp" /> 
        <solid android:color="@color/blue" /> 
      </shape> 
     </item> 
    </layer-list> 
</item> 
<item android:paddingLeft="5dp" android:state_checked="false"> 
    <layer-list> 
     <item android:right="5dp"> 
      <shape android:paddingLeft="5dp" android:shape="oval"> 
       <size android:width="20dp" android:height="20dp" /> 
       <solid android:color="@color/grey" /> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 
</selector> 
10

Utilice el siguiente atributo XML s.Funcionó para mí

Para < API = 16 utilización

android:paddingLeft="16dp" 

Para API> = 17 utilización

android:paddingStart="@16dp" 

Ej:

<android.support.v7.widget.AppCompatRadioButton 
     android:id="@+id/popularityRadioButton" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:paddingEnd="@dimen/radio_button_text" 
     android:paddingLeft="@dimen/radio_button_text" 
     android:paddingRight="@dimen/radio_button_text" 
     android:paddingStart="@dimen/radio_button_text" 
     android:text="Popularity" 
     android:textSize="@dimen/sort_dialog_text_size" 
     android:theme="@style/AppTheme.RadioButton" /> 

enter image description here

Más: el atributo drawablePadding no funciona. Solo funciona si agregaste un dibujable en tu botón de radio. Por ejemplo:

<RadioButton 
    android:id="@+id/radioButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:button="@null" 
    android:drawableEnd="@android:drawable/btn_radio" 
    android:drawablePadding="56dp" 
    android:drawableRight="@android:drawable/btn_radio" 
    android:text="New RadioButton" /> 
0
<RadioButton 
       android:id="@+id/rb1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:background="@null" 
       android:paddingLeft="20dp" 
       android:text="1" 
       android:textColor="@color/text2" 
       android:textSize="16sp" 
       android:textStyle="bold" /> 
+0

Considere agregar algunos comentarios para explicar cómo esto resuelve el problema;) – DeadlyJesus

0

Usted podría tratar de usar el atributo gravedad de botón de radio.

<RadioButton 
         android:id="@+id/rb_all" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:checked="true" 
         android:gravity="right|center_vertical" 
         android:padding="@dimen/padding_30dp" 
         android:text="@string/filter_inv_all" 
         android:textColor="@color/black" 
         android:textSize="@dimen/text_size_18" /> 

Esto alineará el texto al extremo derecho. Mira la primera radio en la imagen.

enter image description here

0

Puede este código en el archivo XML

<RadioButton 
android:id="@+id/rButton" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:drawablePadding="50dp" 
android:paddingLeft="10dip" 
android:text="@string/your_text" /> 

o utilizar esto en clase Actividad

radioButton.setPadding(12, 10, 0, 10); 
0

Uso gravedad

  android:gravity="center_horizontal|center_vertical" 
0

Crear un estilo en style.xml como esto

<style name="Button.Radio"> 

    <item name="android:paddingLeft">@dimen/spacing_large</item> 
    <item name="android:textSize">16sp</item> 
</style> 

Ponga ese estilo en el botón de radio

<RadioButton 
       android:id="@+id/rb_guest_busy" 
       android:layout_width="match_parent" 
       android:layout_height="48dp" 
       android:text="@string/guest_is_waiting" 
       android:textSize="@dimen/font_size_3x_medium" 
       android:drawablePadding="@dimen/spacing_large" 
       android:textColor="@color/color_text_heading_dark" 
       style="@style/Button.Radio"/> 

Puede cambiar cualquier atributo igual que el botón ya que radioButton botón indirectamente hereda.

0

Sé que es una vieja pregunta, pero con esta solución, finalmente tuve la tranquilidad y me olvidé del nivel de la API.

RadioGroup vertical del lado izquierdo con vista de texto vertical del lado derecho.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <RadioGroup 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical"> 
     <RadioButton 
      android:id="@+id/radio1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
     <RadioButton 
      android:id="@+id/radio2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </RadioGroup> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_marginLeft="8dp" 
      android:gravity="center_vertical" 
      android:text="Radio 1"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_marginLeft="8dp" 
      android:gravity="center_vertical" 
      android:text="Radio 2"/> 
    </LinearLayout> 
</LinearLayout> 
Cuestiones relacionadas