左对齐文本,右键对齐

时间:2011-11-03 00:34:12

标签: android android-layout

我正在尝试为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将复选框覆盖在行的左侧。

14 个答案:

答案 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>

图片:

enter image description here enter image description here enter image description here enter image description here enter image description here

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