Как программно изменить значок контурной кнопки?

https://material.io/develop/android/components/buttons#text-button Из этой ссылки есть метод setIcon, но как мне его достичь?

2
0
2 289
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы не используете материальную тему в качестве темы приложения, вам необходимо объявить материальную кнопку следующим образом в xml:

 <com.google.android.material.button.MaterialButton
                android:id = "@+id/outlinedButton"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:text = "Outlined button"
                app:icon = "@drawable/ic_launcher_background"
                style = "@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"
                />

И изменить значок программно:

findViewById<MaterialButton>(R.id.outlinedButton).setIcon(ContextCompat.getDrawable(this,R.drawable.ic_launcher_foreground))

Спасибо. Я использую свою собственную тему, но родителем является Theme.MaterialComponents.Light.NoActionBar, однако этого недостаточно, мне нужно использовать то, что вы сказали.

Botond Sulyok 13.12.2020 12:01

В Android каждый компонент виджета пользовательского интерфейса является либо View , либо производным от View, и, согласно документации, кнопка является производной от TextView.

Теперь есть кое-что важное, что нужно знать о текстах в Android. Фреймворк позволяет определить Compound Drawables для каждого текста — взгляните на этот метод. С его помощью вы можете установить составные чертежи программно, но обратите внимание также на раздел документации Related XML Attributes — чертежи могут быть определены в XML, что обычно является самым простым способом (конечно, если это применимо в данном случае).

Изображение кнопки, которое вы прикрепили, выглядит как MaterialButton, которое также является стандартным Button, поэтому значок «плюс» должен быть просто составным рисунком и, как таковой, должен быть легко изменен, как описано выше.

Обновлено: если подумать, с библиотекой дизайна материалов Google для Android все не так просто. Взгляните на MaterialButton документы, на которые я ссылался выше — там есть метод setIcon(), и он, вероятно, отвечает на ваш вопрос. Вы также можете определить свой значок, который можно рисовать в XML, используя атрибут app:icon.

Другие вопросы по теме