Я имею ImageButton
в моем приложении и я должен изменить оттенок изображения, когда кнопка pressed/focused
. Я имею ImageButton
набор для получения src
от XML-файла, который следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<item
android:state_pressed="true"
android:tint="@color/black"
android:drawable="@drawable/search"
/>
<!-- focused -->
<item
android:state_focused="true"
android:tint="@color/black"
android:drawable="@drawable/search"
/>
<!-- default -->
<item
android:tint="@null"
android:drawable="@drawable/search"
/>
</selector>
Однако оттенок не применяется когда ImageButton
нажимается или фокусируется - изображение просто отображается как нормальное. Черный цвет определяется как #000000
как всегда. Какие-либо идеи?
Вы можете довольно легко изменить оттенок в коде через:
ImageButton button = (ImageButton) this.findViewById(R.id.button_i_want_to_modify);
button.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint
Надеюсь на это помогает.
JS
Поскольку вы определили селектор как src для ImageButton, Android AFAIK просто возьмет drawable, потому что он соответствует типу src. Так что оттенок не будет использоваться.
Тем не менее, у меня была аналогичная проблема: я также пытался использовать селектор, подобный вашему, но для значения android: tint ImageButton вместо android: src. Конечно, я пропустил значения оттенка, которые у вас есть в вашем селекторе. Это также решит вашу проблему, потому что вы хотите использовать один и тот же drawable для всех состояний. Любопытно, что каждый раз я получаю NumberFormatException, в котором говорится, что система не смогла проанализировать res / color / tint_selector.xml (который действительно является моим селектором) как целое число. Чтобы быть конкретным, мой код выглядит так:
Это мой селектор, сохраненный в /res/color/tint_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#D3D3D3"/> <!-- pressed -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
, и это соответствующий ImageButton:
<ImageButton android:id="@+id/program_help"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/symbol"
android:tint="@color/tint_selector">
</ImageButton>
Возможно, это вам немного поможет, хотя в настоящее время не работает.