¿Cómo puedo hacer que la casilla de verificación en Android CheckedTextView esté alineada a la izquierda en lugar de alineada a la derecha?

Estoy intentando usar R.layout.simple_list_item_multiple_choice con ListView. CheckedTextView se utiliza en simple_list_item_multiple_choice.xml, pero ¿cómo puedo hacer que la casilla esté alineada a la izquierda en lugar de alineada a la derecha?

Cree su propia plantilla de fila y establezca android: drawableLeft en el CheckedTextView.

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="40dip" android:gravity="center_vertical" android:paddingLeft="5dip" android:drawableLeft="?android:attr/listChoiceIndicatorMultiple" /> 

o

 android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 

El secreto está en android: checkMark make it null

 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/checked_text_single_choice" android:layout_width="match_parent" android:layout_height="52dp" android:checkMark="@null" android:gravity="center_vertical" android:textAppearance="?android:attr/textAppearanceSmall" android:drawableLeft="?android:attr/listChoiceIndicatorSingle" android:drawableRight="@null" android:textColor="@android:color/black" /> 

No creo que puedas. Mirando el código fuente , parece que la marca de selección se dibuja a la derecha todo el tiempo. Y, para ser honesto, te recomendaría que te quedas con eso, para la consistencia – Android se golpea todo el tiempo porque sus aplicaciones tienen interfaces de usuario inconsistentes.

En la posibilidad de que alguien esté apuntando con una pistola en la cabeza, forzándote a cambiar la colocación de la marca de verificación, subclase CheckedTextView como OMGPleaseDontShootCheckedTextView y métodos de reemplazo como onDraw() , con versiones onDraw() de la original que cambia la ubicación de la imagen Y el texto.

Si desea que la casilla esté a la izquierda, simplemente utilice un CheckBox . Tal vez no es una cuestión por supuesto, pero un CheckBox puede contener texto. Puede definir ese texto agregando un atributo XML android: text , o llamando al método setText () . En realidad CheckBox se hereda de Button , que hereda de TextView , por eso tiene todas las propiedades relacionadas con el texto.

Un ejemplo de la sugerencia de @ WonderCsabo para usar CheckBox.

 <CheckBox android:id="@+id/create_account_checkedTextView_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show" android:gravity="center" android:checked="true" # relative layout params android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_above="@+id/hint1" /> 

Checkbox_example

Puede haber un truco con Checkable Layout como en este post – https://chris.banes.me/2013/03/22/checkable-views/ . Sólo tiene que utilizar un diseño personalizado como este como el diseño del elemento ListView:

 <com.example.custom_view.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <CheckedTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:checkMark="?android:attr/listChoiceIndicatorSingle" android:duplicateParentState="true" .../> <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" .../> </com.example.custom_view.CheckableLinearLayout> 

o

 android:checkMark=?android:attr/listChoiceIndicatorMultiple" 

Puedes asignar tu drawable al atributo drawableLeft, pero no te hará ningún bien porque no soporta el tinte. En su lugar extendí CheckedTextView así:

 public class LeftSideCheckedTextView extends CheckedTextView { public LeftSideCheckedTextView(Context context) { this(context, null, 0); } public LeftSideCheckedTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public LeftSideCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); Field mCheckMarkGravity = null; try { mCheckMarkGravity = this.getClass().getSuperclass().getDeclaredField("mCheckMarkGravity"); mCheckMarkGravity.setAccessible(true); mCheckMarkGravity.set(this, Gravity.START); } catch (Exception e) { Logger.error(e); } } } 

Aquí accedo al campo oculto mCheckMarkGravity que se utiliza dentro de CheckedTextView pero no tiene acceso a través de atributos de estilo, de acuerdo con este ticket de error: https://code.google.com/p/android/issues/detail?id=174517

Probar esto y espero que te dé algunas ideas

  <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Connection lost sound alert" android:layout_weight="10" android:layout_gravity="center" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="2" android:layout_gravity="right" android:orientation="horizontal" > <CheckBox android:id="@+id/checkbox_meat" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="right" android:onClick="onCheckboxClicked"/> </LinearLayout> </LinearLayout> 

Android: drawableLeft = "? Android: attr / listChoiceIndicatorMultiple": P

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.