Làm thế nào để hiển thị hộp kiểm Android ở bên phải?


146

Theo mặc định, hộp kiểm android hiển thị văn bản ở bên phải và hộp kiểm ở bên trái
Tôi muốn hiển thị hộp kiểm ở bên phải với văn bản ở bên trái

Làm thế nào để tôi đạt được điều này?

Câu trả lời:


41

Tôi không thể nghĩ ra cách nào với kiểu dáng, nhưng bạn chỉ có thể đặt văn bản của hộp kiểm thành không có gì và đặt TextView ở bên trái hộp kiểm với văn bản bạn muốn.


Tôi có một câu hỏi về điều này: khi bạn nhấp vào bố cục, nó sẽ hiển thị (trong một thời gian rất ngắn) rằng toàn bộ hàng được chọn. Làm thế nào để bạn làm điều đó và mô phỏng rằng đó là một hiệu ứng bản địa?
nhà phát triển Android

đừng bận tâm - tôi đã đặt bộ chọn cho bố cục và bây giờ thì ổn.
nhà phát triển Android

@androiddeveloper xin vui lòng bạn có thể đăng giải pháp chọn?
Fouad Wahabi

1
@FouadWahabi Bạn có thể tạo một xml drawable trong "res / drawable", chẳng hạn như: stackoverflow.com/a/2038086 và đặt nền của chế độ xem / bố cục thành tệp có thể vẽ này. Bạn có thể cần phải làm cho nó có thể nhấp quá. Tôi nghĩ rằng tôi cũng đã thấy một bài giảng Google IO về nó. không chắc. rất khuyến khích kiểm tra video của họ.
nhà phát triển Android

1
@FouadWahabi Vâng, bạn có thể mở rộng lớp bố cục mà bạn đã chọn và tự thêm logic này. Bạn có thể xem qua tất cả các quan điểm của trẻ và thay đổi trạng thái của chúng. Bạn có thể sử dụng các liên kết đó để giúp bạn ra ngoài: developer.android.com/samples/CustomChoiceList/src/ mẹo , antoine-merle.com/blog/2013/07/17/ . thêm một clickListener và chuyển đổi kiểm tra, và bên trong "setChecked" đặt trạng thái của các khung nhìn con tương ứng nhưng chỉ khi chúng thực hiện Kiểm tra.
nhà phát triển Android

362

Tôi nghĩ rằng đã quá muộn để trả lời câu hỏi này, nhưng thực sự có một cách để đạt được mục tiêu của bạn. Bạn chỉ cần thêm dòng sau vào hộp kiểm của mình:

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

Bạn cũng có thể sử dụng drawable tùy chỉnh của mình cho hộp kiểm.

Và cho một radioButton:

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

Và nếu bạn muốn làm điều đó theo chương trình:

Xác định bố cục và đặt tên là RightCheckBox và sao chép các dòng sau:

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

và khi bạn cần thêm nó theo lập trình, bạn chỉ cần bơm nó vào một CheckBox và thêm nó vào chế độ xem gốc.

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

5
Và đối với một hộp kiểm, bạn có thể sử dụng android:drawableRight="?android:attr/listChoiceIndicatorMultiple". Tôi nghĩ rằng đây là giải pháp tốt nhất cho một hộp kiểm bên phải tôi đã tìm thấy cho đến nay.
Pierre-Luc Paour

7
Xin lưu ý rằng SDK Android 5.0 sẽ hiển thị cho bạn cảnh báo về các thiết bị RTL. Để làm cho nó biến mất, chỉ cần thêm android:drawableEndvào android:drawableRight(với cùng một giá trị).
Quentin S.

6
Giải pháp này hoạt động khá tốt để giải quyết vấn đề. Tuy nhiên, trên Android 5. +, trong khi tiện ích tiêu chuẩn chứa gợn có thể rút ra được ở một khu vực nhỏ xung quanh kiểm tra, tiện ích được sửa đổi này cho phép Ripple mở rộng vượt ra ngoài giới hạn của chính tiện ích. Nếu sử dụng kỹ thuật này, tôi khuyên bạn nên thiết lập nền để sử dụng gợn có thể vẽ bằng mặt nạ hình chữ nhật.
Justin Pollard

2
Android cung cấp một tá đối tượng xem, tất cả đều có thể được thay đổi để vẽ android có thể vẽ hoặc có thể vẽ tùy chỉnh. Nếu bạn muốn hiệu ứng gợn (5.0+) trên đối tượng, chỉ cần đặt nền của nó thành một bản vẽ XML có thể cho phép gợn. Liên kết sau đây cho thấy một số mẫu xem các đối tượng, CheckedTextView, CheckBox, ToggleButton, v.v với bộ có thể quét được. Landenlabs.com/android/uicomponents/uicomponents.html#checkbox
LanDenLabs

6
Nó cho thấy một gợn tròn ở giữa văn bản, nhưng không thể vẽ bên phải, do đó trông xấu xí trên các phiên bản Android hiện đại
Leo Droidcoder

122

Bạn có thể làm

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

Theo dõi là đủ

android:layoutDirection="rtl"

3
Hacky và thanh lịch cùng một lúc. Chúc mừng!
Roman Samoilenko

Người đàn ông lừa giỏi! đừng quên trọng lực: android: vity = "right | centre" để có được hiệu ứng phản chiếu như mong đợi.
Tobliug

3
Đây không phải là cách chính xác, bởi vì nếu thiết bị của bạn sử dụng ngôn ngữ RTL, nó sẽ không phù hợp.
Martin Marconcini

cb.setLayoutDirection (CheckBox.LAYOUT_DIRMENT_RTL);
paakjis

1
Cần thiết lập android:gravity="end|center_vertical"để hiển thị văn bản ở bên trái vì bố cục bắt đầu ngay bây giờ.
Serge

52

Bạn có thể thêm android:layoutDirection="rtl"nhưng nó chỉ khả dụng với API 17.


19

Chỉ cần sao chép này:

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

Chúc mừng mã hóa! :)


14

Văn bản hộp kiểm có thể không thẳng hàng với trái

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

trong một số thiết bị. Có thể sử dụng CheckedTextView để thay thế để tránh sự cố,

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

và liên kết này sẽ hữu ích: Căn chỉnh văn bản bên trái, hộp kiểm bên phải


Đó là một nút radio. Làm thế nào về một cho hộp kiểm vật liệu xin vui lòng?
Monica Aspiras Labbao

1
Để sử dụng hộp kiểmandroid:checkMark="?android:attr/listChoiceIndicatorMultiple"
Philipp

Để sử dụng radiobuttonandroid: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" />`

Điều đó cũng làm cho văn bản được căn phải, do đó, nếu chế độ xem hộp kiểm phù hợp với chiều rộng cha, nó sẽ trông lạ.
David Hiệu trưởng

6

Theo đề xuất của @The Berga Bạn có thể thêm android:layoutDirection="rtl"nhưng nó chỉ khả dụng với API 17.
để triển khai động, ở đây sẽ có

chkBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


3

hơn nữa từ Hazhir imput, đối với vấn đề này là cần thiết tiêm thuộc tính đó vào hộp kiểm xml cấu hình android: paddingLeft = "0dp", điều này là để tránh khoảng trống ở bên trái hộp kiểm.


3

Thêm một câu trả lời khác cho câu hỏi này sử dụng CheckedTextView Nếu bất cứ ai đang cố gắng làm điều đó theo chương trình. Nó cũng có tùy chọn sử dụng hình ảnh tùy chỉnh cho hộp kiểm. Và có thể được thực hiện trong một Chế độ xem duy nhất

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

Từ XML nếu bạn muốn bắt đầu -

<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

Liên kết sau đây trình bày cách hiển thị các đối tượng xem Android tiêu chuẩn với một hộp kiểm hoạt hình ở bên phải bằng cách đặt bên phải có thể vẽ được.

Đặt nền để có được hiệu ứng gợn.

[liên kết đến trang web với hộp kiểm ví dụ ở bên phải và bên trái.] [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" />

Mẫu checkline.xml (có thể vẽ được, xem liên kết cho phiên bản hoạt hình trong drawable-v21)

Mẫu trong suốt_ripple.xml (trong 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>


Mẫu trong suốt_ripple.xml (có thể vẽ, chỉ tô sáng không có gợn

<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

Nếu không bắt buộc phải sử dụng, CheckBoxbạn chỉ có thể sử dụng Switchthay thế. Một Switch hiển thị văn bản ở phía bên trái theo mặc định.


0

Bạn cũng có thể sử dụng cái này,

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

Luôn luôn có thêm tín dụng để bao gồm một chút chi tiết hoặc tài liệu tham khảo để nghiên cứu thêm. Làm cho câu trả lời của bạn hữu ích hơn
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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.