จะแสดงช่องทำเครื่องหมาย android ทางด้านขวาได้อย่างไร


146

โดยค่าเริ่มต้นหุ่นยนต์ช่องทำเครื่องหมายแสดงข้อความทางด้านขวาและช่องทำเครื่องหมายที่ด้านซ้าย
ฉันต้องการที่จะแสดงช่องทำเครื่องหมายที่ด้านขวาด้วยข้อความทางด้านซ้าย

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


41

ฉันไม่สามารถนึกถึงการจัดแต่งทรงผมได้ แต่คุณสามารถตั้งค่าข้อความของช่องทำเครื่องหมายเป็นอะไรก็ได้และวาง TextView ทางด้านซ้ายของช่องทำเครื่องหมายด้วยข้อความที่คุณต้องการ


ฉันมีคำถามเกี่ยวกับเรื่องนี้: เมื่อคุณคลิกที่เลย์เอาต์มันควรจะแสดง (ในเวลาสั้น ๆ ) ที่เลือกทั้งแถว คุณจะทำเช่นนั้นและจำลองว่าเป็นเอฟเฟกต์พื้นเมืองได้อย่างไร
นักพัฒนา android

ไม่เป็นไร - ฉันได้ตั้งตัวเลือกไปที่เค้าโครงแล้วและตอนนี้ก็ใช้ได้
นักพัฒนา android

@androiddeveloper โปรดโพสต์วิธีแก้ปัญหาตัวเลือกได้ไหม
Fouad Wahabi

1
@FouadWahabi คุณสามารถสร้าง xml drawable ใน "res / drawable" ได้เช่น: 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"

คุณสามารถใช้ drawable ที่กำหนดเองของคุณสำหรับช่องทำเครื่องหมายเช่นกัน

และสำหรับ radioButton:

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

7
โปรดทราบว่า Android 5.0 SDK จะแสดงคำเตือนเกี่ยวกับอุปกรณ์ RTL หากต้องการทำให้หายไปเพียงเพิ่มandroid:drawableEndนอกจากandroid:drawableRight(ด้วยค่าเดียวกัน)
Quentin S.

6
วิธีนี้ใช้ได้ผลดีในการแก้ปัญหา อย่างไรก็ตามบน Android 5. + ในขณะที่วิดเจ็ตมาตรฐานมีระลอกคลื่นที่วาดได้บนพื้นที่เล็ก ๆ รอบ ๆ วิดเจ็ตที่แก้ไขนี้อนุญาตให้ระลอกขยายเกินขอบเขตของวิดเจ็ตเอง หากใช้เทคนิคนี้ฉันแนะนำให้ตั้งค่าพื้นหลังให้ใช้ระลอกคลื่นด้วยหน้ากากสี่เหลี่ยม
Justin Pollard

2
Android มีวัตถุมุมมองโหลซึ่งทั้งหมดสามารถปรับเปลี่ยนเพื่อวาดรูปได้ทั้งแบบ Android และแบบกำหนดเองได้ หากคุณต้องการเอฟเฟกต์ระลอกคลื่น (5.0+) บนวัตถุเพียงแค่ตั้งค่าพื้นหลังของมันเป็น drawable XML ซึ่งเปิดใช้งานระลอกคลื่น ลิงค์ต่อไปนี้จะแสดงตัวอย่างมุมมองวัตถุต่างๆ, CheckedTextView, ช่องทำเครื่องหมาย, ToggleButton และอื่น ๆ ด้วยชุด drwable ที่เหมาะสม landenlabs.com/android/uicomponents/uicomponents.html#checkbox
LanDenLabs

6
มันแสดงให้เห็นถึงระลอกคลื่นรอบในใจกลางของข้อความ แต่ไม่ได้อยู่บน drawable ที่เหมาะสมจึงดูน่าเกลียดในรุ่น Android ที่ทันสมัย
Leo Droidcoder

122

คุณทำได้

<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
แฮ็คและสง่างามในเวลาเดียวกัน ไชโย!
Roman Samoilenko

คนดีหลอก! อย่าลืมแรงโน้มถ่วง: android: gravity = "right | center" เพื่อให้ได้ผลสะท้อนที่คาดหวัง
Tobliug

3
นี่ไม่ใช่วิธีที่ถูกต้องเพราะหากอุปกรณ์ของคุณใช้ภาษา RTL จะไม่ถูกต้อง
Martin Marconcini

cb.setLayoutDirection (CheckBox.LAYOUT_DIRECTION_RTL);
paakjis

1
จำเป็นต้องตั้งค่าandroid:gravity="end|center_vertical"ให้แสดงข้อความทางซ้ายเนื่องจากเลย์เอาต์เริ่มต้นที่นี่
Serge


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>

มีความสุข codding! :)


14

ข้อความช่องทำเครื่องหมายอาจไม่สอดคล้องกับซ้าย

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

ในอุปกรณ์บางอย่าง สามารถใช้CheckedTextViewแทนเพื่อหลีกเลี่ยงปัญหา

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

และลิงค์นี้จะมีประโยชน์: จัดข้อความชิดซ้ายช่องทำเครื่องหมายขวา


นั่นคือปุ่มตัวเลือก กรุณาเลือกหนึ่งช่องสำหรับวัสดุ
Monica Aspiras Labbao

1
สำหรับช่องทำเครื่องหมายใช้android:checkMark="?android:attr/listChoiceIndicatorMultiple"
Philipp

สำหรับ RadioButton ใช้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"แต่ใช้ได้เฉพาะกับ API 17
สำหรับการใช้งานแบบไดนามิกเท่านั้น

chkBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


3

ยิ่งไปกว่านั้นจาก imput Hazhir สำหรับปัญหานี้เป็นสิ่งจำเป็นฉีดที่คุณสมบัติในกล่องกาเครื่องหมายการกำหนดค่า 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

ลิงค์ต่อไปนี้แสดงให้เห็นถึงวิธีการแสดงวัตถุมุมมอง Android มาตรฐานตลอดกาลด้วยช่องทำเครื่องหมายเคลื่อนไหวทางด้านขวาโดยการตั้งค่า drawable ที่เหมาะสม

ตั้งค่าพื้นหลังเพื่อให้ได้เอฟเฟกต์ระลอกคลื่น

[ลิงก์ไปยังเว็บไซต์พร้อมช่องทำเครื่องหมายตัวอย่างด้านขวาและซ้าย] [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-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คุณก็สามารถใช้Switchแทนได้ สวิตช์แสดงข้อความทางด้านซ้ายเป็นค่าเริ่มต้น


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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.