如何在右侧显示android复选框?


146

默认情况下,android复选框在右侧显示文本,在左侧
显示复选框,我想在右侧显示复选框,在左侧显示文本

我该如何实现?

Answers:


41

我想不出样式的方法,但是您可以将复选框的文本设置为空,然后将TextView和所需的文本放在复选框的左侧。


我对此有一个疑问:当您单击布局时,它应该显示(在很短的时间内)整个行均已选中。您如何做到这一点并模拟它是本机效果?
android开发人员

没关系-我已经为布局设置了一个选择器,现在可以了。
android开发人员

@androiddeveloper,请问您可以发布选择器解决方案吗?
Fouad Wahabi

1
@FouadWahabi您可以在“ res / drawable”中创建xml可绘制文件,例如:stackoverflow.com/a/2038086,并将视图/布局的背景设置为此可绘制文件。您可能还需要使其可点击。我想我也看到了有关它的Google IO讲座。不确定。强烈建议检查他们的视频。
Android开发人员

1
@FouadWahabi好,您可以扩展您选择的布局类,并自己添加此逻辑。您可以遍历所有子视图并切换其状态。您可以使用这些链接来帮助你:developer.android.com/samples/CustomChoiceList/src/...antoine-merle.com/blog/2013/07/17/...。添加一个clickListener并切换检查,并在“ setChecked”内部相应地设置子视图的状态,但前提是它们实现Checkable。
Android开发人员

362

我认为回答这个问题为时已晚,但是实际上有一种方法可以实现您的目标。您只需要在复选框中添加以下行:

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

您也可以将自定义可绘制对象用于复选框。

对于单选按钮:

android:button="@null"
android:drawableRight="@android:drawable/btn_radio"

如果您要以编程方式执行此操作,请执行以下操作:

定义一个布局并将其命名为RightCheckBox并复制以下行:

<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
    android:text="hello"
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:button="@null"
    android:drawableRight="?android:attr/listChoiceIndicatorMultiple"/>

当您需要以编程方式添加它时,只需将其充气到CheckBox并将其添加到根视图即可。

CheckBox cb = (CheckBox)((LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE)).inflate(R.layout.check_right_checkbox,null);
rootView.addView(cb);

5
对于复选框,您可以使用android:drawableRight="?android:attr/listChoiceIndicatorMultiple"。我认为这是到目前为止我发现的右边复选框的最佳解决方案。
Pierre-Luc Paour 2014年

7
请注意,Android 5.0 SDK将向您显示有关RTL设备的警告。为了让它消失,只是添加android:drawableEndandroid:drawableRight(以相同的值)。
Quentin S.

6
该解决方案很好地解决了该问题。但是,在Android 5. +上,尽管标准小部件的波纹可绘制到支票周围的一小部分,但修改后的小部件允许波纹扩展到小部件本身的边界之外。如果使用此技术,建议将背景设置为使用带有矩形蒙版的可绘制波纹。
贾斯汀·波拉德

2
Android提供了十二个视图对象,可以更改所有视图对象以绘制android可绘制对象或自定义可绘制对象。如果要在对象上产生涟漪效果(5.0+),只需将其背景设置为可绘制涟漪效果的XML drawable。以下链接显示了几个示例视图对象,CheckedTextView,CheckBox,ToggleButton等,并设置了正确的drwable。 landenlabs.com/android/uicomponents/uicomponents.html#checkbox
LanDenLabs

6
它在文本的中心显示了一个圆形的波纹,但在右边的可绘制对象上却没有,因此在现代Android版本上看起来很难看
Leo Droidcoder

121

你可以做

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right|center"//or "center_vertical" for center text
android:layoutDirection="rtl"
android:text="hello" />

下一行就足够了

android:layoutDirection="rtl"

3
朴实而优雅。干杯!
罗曼·萨米连科

好把戏!不要忘记重力:android:gravity =“ right | center”以获得预期的镜像效果。
Tobliug

3
这不是正确的方法,因为如果您的设备使用RTL语言,则外观将不正确。
Martin Marconcini

cb.setLayoutDirection(CheckBox.LAYOUT_DIRECTION_RTL);
paakjis

1
需要设置android:gravity="end|center_vertical"为使文本显示在左侧,因为布局是从现在开始的。
Serge

52

您可以添加,android:layoutDirection="rtl"但仅适用于API 17。


19

只需复制以下内容:

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Your text:"/>
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            />
    </LinearLayout>

祝大家高兴!:)


14

复选框文字可能未与左对齐

android:button="@null"
android:drawableRight="@android:drawable/btn_radio"

在某些设备上。可以使用CheckedTextView作为替代来避免该问题,

<CheckedTextView
    ...
    android:checkMark="@android:drawable/btn_radio" />

并且此链接会有所帮助:文本左对齐,复选框右对齐


那是一个单选按钮。请问一个用于材料复选框的怎么样?
Monica Aspiras Labbao '16

1
对于复选框使用android:checkMark="?android:attr/listChoiceIndicatorMultiple"
Philipp

对于单选按钮使用android:checkMark="?android:attr/listChoiceIndicatorSingle"
Philipp

13
    <android.support.v7.widget.AppCompatCheckBox
  android:id="@+id/checkBox"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="10dp"
  android:layoutDirection="rtl"
  android:text="text" />`

这也使文本右对齐,因此如果复选框视图与父级宽度匹配,它将看起来很奇怪。
David Rector

6

正如@The Berga所建议的那样,您可以添加,android:layoutDirection="rtl"但仅适用于API17。
用于动态实现,在这里

chkBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


3

此外,还可以从Hazhir imput获取此问题,因为有必要在复选框xml配置android:paddingLeft =“ 0dp”中将该属性注入该属性,这是为了避免复选框左侧的空白。


3

如果有人试图以编程方式执行此操作,则为使用CheckedTextView的问题添加另一个答案。它还可以选择使用自定义图像作为复选框。并且可以在单个视图中完成

final CheckedTextView checkBox = new CheckedTextView(getApplicationContext());
    checkBox.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    checkBox.setId(1);
    checkBox.setCheckMarkDrawable(android.R.drawable.checkbox_off_background);
    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkBox.isChecked()){
                checkBox.setChecked(false);
                checkBox.setCheckMarkDrawable(android.R.drawable.checkbox_off_background);
            }else{
                checkBox.setChecked(true);
                checkBox.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);
            }
        }
    });
    checkBox.setTextColor(Color.BLACK);
    checkBox.setGravity(Gravity.LEFT);
    checkBox.setText("hi");

如果要启动,请从XML启动-

<CheckedTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checkMark="@android:drawable/checkbox_off_background"
        android:checked="false"
        android:text="Hi from xml"/>

0

以下链接演示了如何通过设置右侧的drawable来在右侧的动画复选框中呈现多个Standard Android视图对象。

设置背景以获得波纹效果。

[链接到网站的左侧和右侧带有示例复选框。] [1] http://landenlabs.com/android/uicomponents/uicomponents.html#checkbox

         <Button
            android:id="@+id/p2Button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:background="@drawable/transparent_ripple"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:text="Button"
            android:textAllCaps="false"

            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <android.support.v7.widget.AppCompatButton
            android:id="@+id/p2Button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:background="@drawable/transparent_ripple"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:text="AppCompatButton"
            android:textAllCaps="false"

            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <TextView
            android:id="@+id/p2TextView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:background="@drawable/transparent_ripple"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:hapticFeedbackEnabled="true"

            android:text="TextView"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/p2TextView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:background="@drawable/transparent_ripple"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:hapticFeedbackEnabled="true"

            android:text="AppCompatTextView"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@android:color/white" />

        <CheckBox
            android:id="@+id/p2Checkbox1"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:button="@null"
            android:checked="true"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:text="CheckBox"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <android.support.v7.widget.AppCompatCheckBox
            android:id="@+id/p2Checkbox2"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:button="@null"
            android:checked="true"
            android:drawableRight="@drawable/checkline"
            android:gravity="left|center_vertical"
            android:text="AppCompatCheckBox"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <android.support.v7.widget.AppCompatCheckedTextView
            android:id="@+id/p2Checkbox3"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:checkMark="@drawable/checkline"
            android:checked="true"
            android:gravity="left|center_vertical"
            android:text="AppCompatCheckedTextView"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <!--  android:checkMark="?android:attr/listChoiceIndicatorMultiple" -->
        <CheckedTextView
            android:id="@+id/p2Checkbox4"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:checkMark="@drawable/checkline"
            android:checked="true"
            android:gravity="left|center_vertical"
            android:text="CheckedTextView"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <CheckBox
            android:id="@+id/p2Checkbox5"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:checked="true"
            android:gravity="center_vertical|end"
            android:text="CheckBox"
            android:textColor="@android:color/white"
            android:textSize="@dimen/buttonTextSize" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@android:color/white" />


        <ToggleButton
            android:id="@+id/p2ToggleButton1"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:checked="true"
            android:drawableRight="@drawable/checkline"
            android:gravity="center_vertical|left"
            android:textAllCaps="false"
            android:textColor="@android:color/white"

            android:textOff="ToggleButtonOff"

            android:textOn="ToggleButtonOn"
            android:textSize="@dimen/buttonTextSize" />

        <ToggleButton
            android:id="@+id/p2ToggleButton2"
            android:layout_width="match_parent"
            android:layout_height="@dimen/buttonHeight"
            android:background="@drawable/transparent_ripple"
            android:checked="true"
            android:drawableRight="@drawable/btn_check_material_anim"
            android:gravity="center_vertical|left"
            android:textAllCaps="false"

            android:textColor="@android:color/white"
            android:textOff="ToggleBtnnAnimOff"
            android:textOn="ToggleBtnnAnimOn"
            android:textSize="@dimen/buttonTextSize" />

示例checkline.xml(在drawable中,请参见drawable-v21中的动画版本链接)

样本transparent_ripple.xml(在drawable-v21中)

<!-- Limit ripple to view object, can also use shape such as oval -->
<item android:id="@android:id/mask" android:drawable="@android:color/white" />

<item>
    <selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:enterFadeDuration="200"
        android:exitFadeDuration="200">

        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <solid android:color="#80c0c000" />
            </shape>
        </item>
    </selector>
</item>


样本transparent_ripple.xml(在可绘制区域中,仅突出显示无波纹)

<item android:state_pressed="true">
    <shape android:shape="rectangle">
        <solid android:color="#80c0c000" />
    </shape>
</item>
<item>
    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent" />
    </shape>
</item>



0

您也可以使用它

<CheckBox
       android:layout_width="match_parent"     
       android:layout_height="@dimen/button_height_35"
       android:text="@string/english"
       android:checked="true"
       android:paddingEnd="@dimen/padding_5"
       android:paddingStart="@dimen/padding_5"
       android:layoutDirection="rtl"
       android:drawablePadding="@dimen/padding_5"
       android:drawableEnd="@drawable/ic_english"
       style="@style/TextStyleSemiBold"
       android:textSize="@dimen/text_15"
       android:button="@drawable/language_selector"/>

包括一些详细信息或进一步研究的参考文献总是值得赞扬的。使您的答案更有用
mw509

-1
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/location_permissions"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            android:textColor="@android:color/black" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <CheckBox
                android:id="@+id/location_permission_checkbox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="8dp"
                android:onClick="onLocationPermissionClicked" />

        </RelativeLayout>
    </LinearLayout>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.