Как вернуть цвет границы по умолчанию для MaterialButton? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть две кнопки, и я хочу выделить синюю рамку на нажатой одной. Когда кнопка нажата, она не становится синей, а граница другой кнопки возвращается к значению по умолчанию.

Я не могу вернуть правильную границу по умолчанию. Я пишу функцию, но работает неправильно.

Моя кнопка (вторая совпадает с другим идентификатором и текстом):

 <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_schemes_1"
            style="@style/Buttons.Schemes"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/margin_4"
            android:layout_weight="1"
            android:text="@string/schemes_1"
            app:icon="@drawable/ic_schemes_1" />

Стиль не имеет ничего интересного:

<style name="Buttons.Schemes" parent="Widget.MaterialComponents.Button.OutlinedButton">
        <item name="android:typeface">sans</item>
        <!--android:fontFamily="sans-serif-condensed-medium"-->
        <item name="android:textColor">@android:color/black</item>
        <item name="android:letterSpacing">0</item>
        <item name="iconTint">@null</item>
        <item name="backgroundTint">@android:color/white</item>
    </style>

Моя последняя реализация собиралась найти и запомнить значение границы по умолчанию до того, как произойдет первый щелчок, поэтому сначала я пишу:

private var defaultColor: Int = 0

Тогда

defaultColor = btn_schemes_1.strokeColor.defaultColor

И функция, вызываемая при нажатии одной из кнопок:

  private fun setButtonsBorder(buttonNumber: Int) {
        when (buttonNumber) {
            1 -> {
                btn_schemes_1.strokeColor = ColorStateList.valueOf(Color.BLUE)
                btn_schemes_1.strokeWidth = 2

                btn_schemes_2.strokeColor = ColorStateList.valueOf(defaultColor)
                btn_schemes_2.strokeWidth = 1
            }
            2 -> {
                btn_schemes_1.strokeColor = ColorStateList.valueOf(defaultColor)
                btn_schemes_1.strokeWidth = 1

                btn_schemes_2.strokeColor = ColorStateList.valueOf(Color.BLUE)
                btn_schemes_2.strokeWidth = 2
            }
        }
    }

Но это тоже не удалось, потому что по умолчанию цвет не "те" по умолчанию. Когда я установил его, я обнаружил, что это просто colorPrimary.

Как найти этот цвет по умолчанию или метод записи, чтобы вернуть цвет границы по умолчанию?

1 Ответ

0 голосов
/ 15 мая 2019

Хорошо, я получаю это сам.

После того, как идет глубже, я вызываю его до нажатия кнопки:

Timber.e(btn_schemes_1.strokeColor.toString())

И получаю:

ColorStateList{mThemeAttrs=nullmChangingConfigurations=1073742848mStateSpecs=[[16842912], [-16842912]]mColors=[-16743049, 520093696]mDefaultColor=-16743049}

Так что 520093696мой цветГугл говорит это black12 constant, представленный 0x1F000000

И после

private var defaultColor: Int = 0x1F000000

Все работает.

...