如何使Android CheckedTextView中的checkbox左alignment,而不是右alignment?

我正在尝试使用ListView的R.layout.simple_list_item_multiple_choice。 CheckedTextView在simple_list_item_multiple_choice.xml中使用,但我怎样才能使checkbox左alignment,而不是右alignment?

Solutions Collecting From Web of "如何使Android CheckedTextView中的checkbox左alignment,而不是右alignment?"

创build自己的行模板并在CheckedTextView上设置android:drawableLeft。

<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" /> 

要么

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

秘密是在android:checkMark使其为空

 <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" /> 

我不认为你可以。 看看源代码 ,好像勾号一直绘制在右边。 而且,说实话,我会build议你坚持这一点,为了一致性 – Android一直敲门,因为它的应用程序有不一致的用户界面。

在别人指着枪的时候,迫使你改变Checkmark的子类CheckedTextView作为OMGPleaseDontShootCheckedTextView ,并且重写像onDraw()这样的方法,并且改变了原图的位置和文本。

如果您想让checkbox位于左侧,只需使用CheckBox 。 也许这当然不是问题,但CheckBox可以包含文本。 您可以通过添加XML属性android:text或通过调用setText()方法来定义该文本。 实际上CheckBox是从inheritance自TextView Buttoninheritance的,这就是为什么它具有所有与文本相关的属性。

@ WonderCsabobuild议使用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

在这个post中可以使用Checkable Layout的技巧 – https://chris.banes.me/2013/03/22/checkable-views/ 。 只需使用像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> 

要么

 android:checkMark=?android:attr/listChoiceIndicatorMultiple" 

你可以将drawable赋给drawableLeft属性,但是它不会让你有任何好处,因为它不支持着色。 相反,我像这样扩展了CheckedTextView:

 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); } } } 

在这里,我访问隐藏的字段mCheckMarkGravity在CheckedTextView中使用,但无法通过样式属性访问,根据此错误票: https : //code.google.com/p/android/issues/detail? id=174517

试试这个,希望它会给你一些想法

  <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