Android добавляет границу к кнопке, не теряя тему материала (используя рисование) - PullRequest
0 голосов
/ 27 августа 2018

У меня есть простая кнопка

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:backgroundTint="@color/add_bg"
        android:textColor="@color/add_fg"
        <!--android:borderColor?="@color/button_border"-->
        android:text="@string/add"/>

Мне бы хотелось, чтобы вокруг были белый фон, синий текст и синяя рамка. Я знаю, что могу добиться этого с помощью рисования, как показано здесь и во многих других местах. Тем не менее, я заметил, что если вы добавите рисование к кнопке, то оно потеряет все свои свойства материала (например, тень, а также при нажатии с анимацией причудливой ряби). Так как же добавить рамку вокруг кнопки, не теряя при этом анимации темы материала (анимация теней и тенплов при нажатии)?

1 Ответ

0 голосов
/ 01 сентября 2018

Большинство предметов, которые поставляются с Android, представляют собой просто предварительно упакованный набор атрибутов.

Было бы почти невозможно ожидать, что разработчики Android API включат предварительно упакованный набор атрибутов для каждой возможной комбинации цвета / границы, но всегда есть решение!

К сожалению, как вы упомянули, решение заключается в создании вашего собственного XML-файла, который часто может быть пугающим, пока вы не освоите его. Как только вы это сделаете, вы тоже поразитесь гибкости, которую это позволяет.

Специально для вашей ситуации есть два варианта ...

1) Создание настраиваемой границы XML для рисования.

2) под свойством фона кнопок установите новую настраиваемую рамку для рисования

3) затем также установите эффект ряби под свойствами кнопок xml, добавив:

    android:foreground="?attr/selectableItemBackground"
    android:clickable="true"
    android:focusable="true"

---- ИЛИ ----

Более сложный способ - сделать рисунок, как показано ниже. Это добавит эффект кнопки «рябь», а также собственную тень, цвет кнопки и цвет границы!

"Для тех, кто читает это позже, это может быть менее опытно)

1) В представлении вашего проекта перейдите к res / drawable

2) щелкните правой кнопкой мыши по самой папке и выберите новый / доступный файл ресурсов

3) Введите имя файла my_ripple_button.xml (корень не имеет большого значения, потому что вы замените его на приведенный ниже код)

4) Нажмите на вкладку текста, если вы еще не там

5) выделите весь текст и, в основном, замените его следующим: (создание настраиваемой границы цвета - в основном те же шаги)

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimaryDark">
    <item android:id="@android:id/ripple">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimaryDark" />
            <corners android:radius="@dimen/button_radius_large" />
       </shape>
   </item>

    <item android:id="@android:id/background">
       <shape android:shape="rectangle">
            <gradient
                android:angle="90"
                android:endColor="@color/colorPrimaryLight"
               android:startColor="@color/colorPrimary"
                android:type="linear" />
           <corners android:radius="@dimen/button_radius_large" />
        </shape>
    </item>
</ripple>
...