После изменения цвета кнопки для рисования мой ход исчез, и я не могу снова установить ход - PullRequest
0 голосов
/ 16 апреля 2019

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

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

Активность:

val bottomButton: Button = this.bottomButton
val drawable = bottomButton.getBackground() as GradientDrawable
drawable.mutate().setColorFilter(backBtnColor,PorterDuff.Mode.SRC_OVER)
drawable.setStroke(5,lightBgColor)

XML Drawable:

<?xml version="1.0" encoding="UTF-8"?>
<shape
        xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
            android:width="5dp"
            android:color="@color/colorAccent"/>
    <corners
            android:radius="150dp" />

    <padding
            android:left="5dp"
            android:right="5dp"
            android:top="20dp"
            android:bottom="20dp"/>

    <solid android:color="@color/colorPrimary"/>

</shape>

Я установил Drawable в Layout XML

<Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" android:id="@+id/bottomButton"
                    android:layout_marginHorizontal="24dp"
                    android:textSize="32dp"
                    android:layout_marginVertical="16dp"
                    android:background="@drawable/btn_rounded" tools:text="Options" android:text="Options"/>

В результате новый цвет заполняет всю кнопку (что хорошо, если цвет меняется), но удаляет обводку. Я хочу новый цвет, но сохраняю обводку или, по крайней мере, позвольте мне вернуть обводку к оригиналу.

1 Ответ

0 голосов
/ 18 апреля 2019

Я понял ответ:

В файле Activity:

val backBtnColor:Int = getResources().getColor(R.color.colorPrimaryDark)
val bottomButton: Button = this.bottomButton
val drawable = bottomButton.getBackground().mutate() as GradientDrawable
drawable.setColor(backBtnColor)

ключ заключается в том, чтобы добавить mutate() к val drawable при его объявлении, а не при вызовепотом.Это дает вам возможность setColor() - это то, что вам нужно.

...