Как показать флажок Android на правой стороне?


146

По умолчанию флажок Android показывает текст справа и флажок слева.
Я хочу показать флажок справа, текст слева

как мне этого добиться?

Ответы:


41

Я не могу придумать способ со стилем, но вы можете просто установить текст флажка в ноль и поместить TextView слева от флажка с нужным вам текстом.


У меня есть вопрос по этому поводу: когда вы нажимаете на макет, он должен показывать (в течение очень короткого времени), что выбран целый ряд. как ты это делаешь и симулируешь, что это нативный эффект?
Android-разработчик

не берите в голову - я установил селектор на макет, и теперь все в порядке.
Android-разработчик

@androiddeveloper, пожалуйста, вы можете опубликовать решение для выбора?
Фуад Вахаби

1
@FouadWahabi Вы можете создать XML-объект для рисования в «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"

Вы также можете использовать свой собственный чекбокс для галочки.

И для радио кнопки:

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". Я думаю, что это лучшее решение для флажка справа, который я нашел до сих пор.
Пьер-Люк Паур

7
Обратите внимание, что Android 5.0 SDK покажет вам предупреждение об устройствах RTL. Чтобы сделать это, просто добавьте android:drawableEndв дополнение к android:drawableRight(с тем же значением).
Квентин С.

6
Это решение работало довольно хорошо, чтобы решить проблему. В Android 5. +, однако, хотя стандартный виджет содержит свою рябь, которую можно нарисовать в небольшой области вокруг чека, этот модифицированный виджет позволяет ряби расширяться далеко за пределы самого виджета. Если вы используете эту технику, я предлагаю установить фон для рисования ряби с прямоугольной маской.
Джастин Поллард

2
Android предоставляет дюжину объектов просмотра, каждый из которых может быть изменен, чтобы рисовать либо для рисования на Android, либо для рисования на заказ. Если вы хотите, чтобы эффект ряби (5.0+) на объекте, просто установите его фон для рисования XML, который включает пульсацию. Следующая ссылка показывает несколько примеров объектов просмотра, CheckedTextView, CheckBox, ToggleButton и т. Д. С правым набором параметров. landenlabs.com/android/uicomponents/uicomponents.html#checkbox
LanDenLabs

6
В центре текста он показывает округлую рябь, но не справа, поэтому выглядит ужасно на современных версиях 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
Хаки и элегантный одновременно. Ура!
Роман Самойленко

Хороший трюк человек! не забудьте гравитацию: android: gravity = "right | center", чтобы получить ожидаемый эффект зеркалирования.
Тоблюг

3
это не правильный путь, потому что если ваше устройство работает на языке RTL, оно не будет выглядеть правильно.
Мартин Маркончини,

cb.setLayoutDirection (CheckBox.LAYOUT_DIRECTION_RTL);
Paakjis

1
Необходимо настроить android:gravity="end|center_vertical"отображение текста слева, поскольку макет начинается прямо сейчас.
Серж

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

и эта ссылка будет полезна: выравнивание текста слева, флажок справа


Это радио-кнопка. Как насчет флажка для материала, пожалуйста?
Моника Аспирас Лаббао

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

Это также приводит к выравниванию текста по правому краю, поэтому, если представление флажка соответствует ширине родительского элемента, оно будет выглядеть странно.
Дэвид Ректор

6

По предложению @The Berga Вы можете добавить, android:layoutDirection="rtl"но он доступен только с API 17.
Для динамической реализации, здесь все идет

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

Следующая ссылка демонстрирует, как визуализировать несколько объектов стандартного представления 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

Если не обязательно использовать a, 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.