【问题标题】:Align text left, checkbox right左对齐文本,右对齐复选框
【发布时间】:2011-11-03 00:34:11
【问题描述】:

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

【问题讨论】:

标签: android android-layout


【解决方案1】:

并在复选框属性中将复选框的框移到右侧

android:button="@null"
android:drawableRight="?android:attr/listChoiceIndicatorMultiple"

【讨论】:

  • 您先生,刚刚救了我的命。我一直在努力寻找默认的复选框图像,我正要获得 appcompat。 +1 为“?”用法。
  • 所以这会将CheckBox 放在右侧,但是当您拥有android:button="@null" 属性时,使用colorAccent 进行的AppCompat 小部件着色不起作用。如何使用右侧的 CheckBox 为小部件着色?
  • 我得到的最佳答案
【解决方案2】:

既然你已经在使用一个RelativeLayout,那就利用它的属性吧:

从子项中删除 android:gravity 并将它们替换为 android:layout_alignParentLeft="true" 用于 TextView 和 android:layout_alignParentRight="true" 用于 CheckBox。

相对于父母边界定位孩子。您可能还想为每个子项添加 android:layout_centerVertical="true" 以使每个列表项中的两个垂直居中。

更多选项和属性见documentation

【讨论】:

  • TextView最好加上android:layout_marginRight="36dp",如果你的文字太长,会覆盖checkbox
  • 嗨,如果我使用线性布局怎么办!我还能实现,右边的复选框复合按钮,左边的文本??
【解决方案3】:

第一次您必须将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>

图片:

【讨论】:

  • 极好的解决方案:) +1
【解决方案4】:

在这种情况下我的解决方案是使用:

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

【讨论】:

  • 所以这会将CheckBox 放在右侧,但是当您拥有android:button="@null" 属性时,使用colorAccent 进行的AppCompat 小部件着色不起作用。如何使用右侧的 CheckBox 为小部件着色?
【解决方案5】:

将此作为您的清单/回收站项目。 下面两行是关键。

android:textDirection="ltr" android:layoutDirection="rtl"

<CheckBox
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:textDirection="ltr"
            android:layoutDirection="rtl"
            />

【讨论】:

  • 如果将 Locale 更改为 RTL,视图会发生什么情况?
  • 这是一个非常有效的观点,到目前为止,如果您检查并更新答案,如果您有发现,我没有检查这会很好。
  • 我已将 CheckedTextView 用于我的目的
【解决方案6】:

在 Oibaf 它或 MSaudi 的解决方案的基础上

android:button="@null"
android:drawableRight="?android:attr/listChoiceIndicatorMultiple"

添加

android:paddingLeft="0dp"

为了避免某些设备中复选框左侧的空白区域。来源链接:

How to show android checkbox at right side?

由宙斯男孩回答。

【讨论】:

  • 所以这会将CheckBox 放在右侧,但是当您拥有android:button="@null" 属性时,使用colorAccent 进行的AppCompat 小部件着色不起作用。如何使用右侧的 CheckBox 为小部件着色?
  • toobsco42:对不起,我没有遇到你提到的场景。也许你可以用你的布局文件和代码的细节创建一个问题,有人会给出一个解决方案。
【解决方案7】:

在自己尝试过之后,我终于做到了。你只需要在水平布局中放置一个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】:

    您可以通过将 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" />
    

    【讨论】:

      【解决方案9】:

      对 layout_width 使用 match_parentandroid: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" />
      

      【讨论】:

      • android:layoutDirection="rtl" 工作,谢谢!
      【解决方案10】:

      如果您打算使用 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>
      

      请注意其他元素之上的元素。

      【讨论】:

        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

          您还删除 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>
          

          【讨论】:

            【解决方案13】:

            只需设置开关: 布局参数 -> 宽度为“match_parent”

            原来是“wrap_content”

            【讨论】:

              猜你喜欢
              • 2012-10-30
              • 2014-01-19
              • 2012-10-13
              • 1970-01-01
              • 2020-01-03
              • 1970-01-01
              • 1970-01-01
              • 2015-10-07
              • 1970-01-01
              相关资源
              最近更新 更多