Изменить значок кнопки во время выполнения - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть активность с кнопкой внутри GridLayout, которая определяется следующим образом:

<Button
   android:id="@+id/btnOpion4"
   android:layout_columnWeight="1"
   android:layout_rowWeight="1"
   android:layout_width="0dp"
   android:layout_height="0dp"
   android:drawableStart="@drawable/btnSend"/>

Чтобы отобразить значок на этой кнопке, мне пришлось создать нарисованный xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/ic_send"
        android:state_pressed="true" />
  <item android:drawable="@drawable/ic_send"
        android:state_focused="true" />
  <item android:drawable="@drawable/ic_send" />
</selector>

И все это работает просто отлично ...

Проблема в том, как я могу изменить изображение из кода позади? Например, если пользователь щелкнет какую-либо опцию, затем поменять значок на этой кнопке?

РЕДАКТИРОВАТЬ: Могу ли я найти его для рисования по его идентификатору, и поменять значок? Что-то вроде var btnsendDraw = FindViewById(Resource.Drawable.btnSend);

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете сделать sh, что с помощью метода SetCompoundDrawablesWithIntrinsicBounds, найденного в классе Button.

В вашем случае я бы создал еще один нарисованный файл с другим фоном:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/ic_sent"
        android:state_pressed="true" />
  <item android:drawable="@drawable/ic_sent"
        android:state_focused="true" />
  <item android:drawable="@drawable/ic_sent" />
</selector>

и давайте назовем это: btnSent.

Теперь в вашем коде, когда вы хотите изменить изображение, просто сделайте:

var drawable = GetDrawable(Resource.Drawable.btnSent);
btn1.SetCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);

Этот метод получает 4 различных Drawables: слева, сверху, снизу и снизу в указанном порядке c. Поскольку вы хотите заменить только start , вы установите первый параметр.

Примечание: left и start "одинаковы".

Подробнее этот метод здесь

В конце у вас должно быть что-то вроде этого:

enter image description here

Надеюсь, это поможет. -

...