Як показати прапорець Android на правій стороні?


146

За замовчуванням прапорець Android показує текст праворуч і прапорець ліворуч
Я хочу показати прапорець праворуч із текстом ліворуч

як я цього досягти?

Відповіді:


41

Я не можу придумати спосіб зі стилем, але ви можете просто встановити текст прапорця нанівець і поставити TextView зліва від прапорця з потрібним текстом.


У мене є питання з цього приводу: при натисканні на макет він повинен показувати (на дуже короткий час), що вибрано весь рядок. як це зробити і імітувати, що це нативний ефект?
андроїд розробник

неважливо - я встановив селектор на макет і тепер це нормально.
андроїд розробник

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

1
@FouadWahabi Ви можете створити XML-файл, що виводиться у "res / dravable", як такий: stackoverflow.com/a/2038086 , і встановити фон перегляду / макета таким файлом, що виводиться. Можливо, вам також потрібно зробити так, щоб його можна було натискати. Я думаю, що я також побачив про це лекцію Google IO. не впевнений. настійно рекомендую переглянути їх відео.
андроїд розробник

1
@FouadWahabi Ну ви можете розширити обраний вами клас компонування і додати цю логіку самостійно. Ви можете переглядати всі погляди дитини та змінювати їх стан. Ви можете скористатись цими посиланнями, щоб допомогти вам вирішити: developer.android.com/samples/CustomChoiceList/src/… , antoine-merle.com/blog/2013/07/17/… . додайте clickListener та перемкніть перевірку, а всередині "setChecked" встановіть стан дочірніх переглядів відповідно, але лише якщо вони реалізують Checkable.
андроїд розробник

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 надає десяток об'єктів перегляду, усі вони можуть бути змінені, щоб намалювати або андроїд, який можна перетягнути, або користувацький малюнок. Якщо ви бажаєте ефекту пульсації (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 = "правильний | центр", щоб отримати очікуваний ефект дзеркального відображення.
Тобліг

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"
Філіп

Для використання радіотехнічної кнопкиandroid:checkMark="?android:attr/listChoiceIndicatorSingle"
Філіп

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, для цього питання потрібно ввести це властивість у 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 (у тексті, який можна переглядати, див. Посилання на анімаційну версію в dravable-v21)

Зразок transparent_ripple.xml (у dravable-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.