Возможность рисования для перерывов RadioButton для API 21/22 и ниже - PullRequest
0 голосов
/ 24 декабря 2018

Я создал пользовательский объект для AppCompatButton, и он отлично работает для API уровня 23 и выше.

Здесь можно выполнить пользовательскую отрисовку.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:drawable="@drawable/background_radio_checked" android:state_checked="true" />
    <item android:drawable="@drawable/background_radio_unchecked" android:state_checked="false" />
</selector>

background_radio_checked -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:left="-8dp"
        android:right="-8dp"
        android:top="-8dp">
        <shape>
            <solid android:color="#FFF1EEFF" />
            <stroke
                android:width="1dp"
                android:color="@color/color_ask_question" />
        </shape>
    </item>

    <item
        android:bottom="@dimen/screen_margin_half"
        android:drawable="@drawable/ic_add_filled_24dp"
        android:gravity="start|center_vertical"
        android:left="@dimen/screen_margin_half_plus_four"
        android:right="@dimen/screen_margin_half"
        android:top="@dimen/screen_margin_half" />
</layer-list>

background_radio_unchecked -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/color_employer_divider" />
            <solid android:color="#F2F2F2" />
            <corners android:topLeftRadius="@dimen/screen_margin_half_half_half" />
        </shape>
    </item>
    <item
        android:bottom="@dimen/screen_margin_half"
        android:drawable="@drawable/ic_add_empty_24dp"
        android:gravity="start|center_vertical"
        android:left="@dimen/screen_margin_half_plus_four"
        android:right="@dimen/screen_margin_half"
        android:top="@dimen/screen_margin_half" />
</layer-list>

Используемые элементы рисования являются SVG и имеют высотуширина 24dp.

Как это выглядит на API 23+ enter image description here

Но то же самое выглядит ужасно на уровне API 21.

изображение, используемое в рисовании, растягивается на полную ширину.enter image description here

Попытка удаления анимации, но все равно те же результаты.

Не уверен, что неправильно я делаю или пропускаю.Кажется, я использую какое-то свойство, которое недоступно только в API 23 и выше, но не знаю, какое именно.

1 Ответ

0 голосов
/ 31 декабря 2018

Я отвечу сам, надеюсь, это кому-нибудь поможет.

Я установил этот рисованный объект в качестве фона для своей кнопки и передал "@null" в свойстве кнопки.

        <android.support.v7.widget.AppCompatRadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/custom_radio_button_backgorund"
            android:button="@null"
            android:checked="true" />

Это не сработало, поэтому я создал две отдельные настраиваемые прорисовки для кнопки и фона.

Для пользовательского рисования для фона я просто использовал фигуру с рамкой, цветом фона, радиусом и т. Д., Но без значка.И для пользовательского рисования для кнопки, я использовал значок.Назначение этих двух пользовательских элементов для рисования в фоновом режиме и кнопки позволяет всем работать на устройствах с леденцами и выше.

            <android.support.v7.widget.AppCompatButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/custom_radio_background"
                android:button="@drawable/custom_radio_button"
                android:checked="true" />

----------- Пользовательские элементы рисования для фона -----------

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:drawable="@drawable/background_radio_checked_background" android:state_checked="true" />
    <item android:drawable="@drawable/background_radio_unchecked_background" android:state_checked="false" />
</selector>

background_radio_checked_background -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:left="-8dp"
        android:right="-8dp"
        android:top="-8dp">
        <shape>
            <solid android:color="#EBFFF7" />
            <stroke
                android:width="1dp"
                android:color="#118F5D" />
        </shape>
    </item>
</layer-list>

background_radio_unchecked_background -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/color_employer_divider" />
            <solid android:color="#F2F2F2" />
            <corners android:topRightRadius="@dimen/screen_margin_half_half_half" />
        </shape>
    </item>
</layer-list>

----------- Пользовательская отрисовка длякнопка -----------

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime" android:exitFadeDuration="@android:integer/config_shortAnimTime">
    <item android:drawable="@drawable/background_radio_checked_button" android:state_checked="true" />
    <item android:drawable="@drawable/background_radio_unchecked_button" android:state_checked="false" />
</selector>

background_radio_checked_button -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="@dimen/screen_margin_half"
        android:drawable="@drawable/ic_poll_filled_24dp"
        android:gravity="start|center_vertical"
        android:left="@dimen/screen_margin_half_plus_four"
        android:right="@dimen/screen_margin_half"
        android:top="@dimen/screen_margin_half" />
</layer-list>

background_radio_unchecked_button -

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="@dimen/screen_margin_half"
        android:drawable="@drawable/ic_poll_empty_24dp"
        android:gravity="start|center_vertical"
        android:left="@dimen/screen_margin_half_plus_four"
        android:right="@dimen/screen_margin_half"
        android:top="@dimen/screen_margin_half" />
</layer-list>

Я до сих пор не уверен, почемусоздание единого объекта рисования, который имеет как значок, так и цвет рамки / фона, не работает с устройствами на леденцах.

Предложения, исправления в этом решении приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...