我正在尝试为ListView创建一个布局,右侧有一个复选框,左侧有一些文本。复选框应该一直向右对齐,TextView一直对齐到行的左边,例如:
------------------------
text checkbox
------------------------
text checkbox
------------------------
text checkbox
------------------------
这是我到目前为止所做的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="5dip"
android:paddingRight="5dip"
android:paddingTop="8dip"
android:paddingBottom="8dip"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
/>
<CheckBox
android:id="@+id/chekcbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
/>
</RelativeLayout>
然而,实际渲染的是TextBox将复选框覆盖在行的左侧。
答案 0 :(得分:41)
使用CheckedTextView
替代上面显示的所有内容。
答案 1 :(得分:38)
要在右侧的复选框中输入复选框属性
android:button="@null"
android:drawableRight="?android:attr/listChoiceIndicatorMultiple"
答案 2 :(得分:30)
由于您已经在使用RelativeLayout,请使用它的属性:
从子项中删除android:gravity
,并将其替换为TextView的android:layout_alignParentLeft="true"
和CheckBox的android:layout_alignParentRight="true"
。
这使孩子们相对于父母的边界。您可能还希望为每个子项添加android:layout_centerVertical="true"
,使每个列表项中的两个垂直居中。
有关更多选项和属性,请参阅documentation。
答案 3 :(得分:12)
首次将button
设置为@null
android:button="@null"
如果你想将android复选框移动到右边使用:
android:drawableRight="?android:attr/listChoiceIndicatorMultiple"
否则,如果您希望使用自定义图像以供复选框使用:
android:drawableRight="@drawable/selector_check_box"
并将重力设置为右:
android:gravity="right|center_vertical"
使用自定义复选框的完整操作:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/_ics_btn_check_on" />
<item android:state_window_focused="false" android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/_ics_btn_check_off" />
<item android:state_enabled="true" android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/_ics_btn_check_on_pressed" />
<item android:state_enabled="true" android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/_ics_btn_check_off_pressed" />
<item android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/_ics_btn_check_off" />
<item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/_ics_btn_check_on" />
<item android:state_window_focused="false" android:state_checked="true" android:drawable="@drawable/_ics_btn_check_on_disabled" />
<item android:state_window_focused="false" android:state_checked="false" android:drawable="@drawable/_ics_btn_check_off_disabled" />
<item android:state_checked="false" android:drawable="@drawable/_ics_btn_check_off_disabled" />
<item android:state_checked="true" android:drawable="@drawable/_ics_btn_check_on_disabled" />
</selector>
图片:
答案 4 :(得分:11)
我在这种情况下的解决方案是使用:
<CheckBox
...
android:button="@null"
android:drawableRight="@drawable/my_check"
...
/>
其中my_radio可以是自定义选择器! 选择器的示例可以是:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/check_checked" />
<item android:state_checked="false" android:drawable="@drawable/check_unchecked" />
</selector>
答案 5 :(得分:5)
根据Oibaf或MSaudi的解决方案
android:button="@null"
android:drawableRight="?android:attr/listChoiceIndicatorMultiple"
添加
android:paddingLeft="0dp"
避免某些设备左侧复选框的空白区域。来源链接:
How to show android checkbox at right side?
由zeusboy回答。
答案 6 :(得分:5)
将此作为您的LIST / RECYCLER项目。 以下2行是关键。
<强>机器人:textDirection = “LTR” 机器人:的layoutDirection = “RTL”强>
<CheckBox
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:textDirection="ltr"
android:layoutDirection="rtl"
/>
答案 7 :(得分:2)
在尝试自己做之后,我终于做到了。您只需要将TextView和CheckBox放在水平布局中,然后将重力放在布局的右侧。
以下是代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:gravity="right"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/LabelText"
/>
<CheckBox
android:id="@+id/ChecKBox_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
编辑:我刚注意到你想要一直到屏幕左侧的文字。这会将复选框一直显示在右侧,而复选框旁边的文本则位于复选框的左侧。
像这样:
------------------------
text checkbox
------------------------
text checkbox
------------------------
text checkbox
------------------------
答案 8 :(得分:0)
如果您打算使用relativelayout,您可能需要考虑使用较不烦人的relativelayout属性,alignParentLeft和alignParentRight,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:paddingLeft="5dip"
android:paddingRight="5dip"
android:paddingTop="8dip"
android:paddingBottom="8dip"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alignParentLeft="true"
/>
<CheckBox
android:id="@+id/chekcbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alignParentRight="true"
/>
</RelativeLayout>
注意元素在其他元素之上。
答案 9 :(得分:0)
使用android:gravity =“start
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Has Diploma:"
android:textSize="15dp"
android:id="@+id/checkBox_HasDiploma"
android:gravity="start"/>
答案 10 :(得分:0)
你也删除了 android:orientation =“vertical”,因为相对布局不支持此属性。它是线性布局的属性。
你可以尝试一下
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="8dip"
android:paddingLeft="5dip"
android:paddingRight="5dip"
android:paddingTop="8dip" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="check"
/>
<CheckBox
android:id="@+id/chekcbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true" />
</LinearLayout>
答案 11 :(得分:0)
只需设置开关: 布局参数 - &gt;宽度为&#34; match_parent&#34;
最初是&#34; wrap_content&#34;
答案 12 :(得分:0)
您可以通过将layoutDirection添加到“ rtl”来实现
<CheckBox
android:id="@+id/checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right|center"
android:layoutDirection="rtl"
android:text="@string/declare_info_correct" />
答案 13 :(得分:0)
使用match_parent
作为layout_width和android:layoutDirection="rtl"
就足够了:
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/taxDevRadioButton"
android:layout_width="match_parent"
android:layoutDirection="rtl"
android:layout_height="wrap_content"
android:layout_below="@+id/divider2"
android:layout_marginTop="10dp"
android:text="ELIGIBLE FOR TAX" />