Цвет фона Android ImageButton

У меня есть ImageButton с фоновым изображением, которое имеет некоторую прозрачность. По умолчанию кнопка получает серый фон, где пиксели прозрачности - из-за темы Holo.Light. Я попытался настроить цвет фона кнопки на прозрачный с помощью метода setBackgroundColor(Color.TRANSPARENT). Это прекрасно работает и делает то, что мне нужно, но теперь моя кнопка больше не имеет светло-голубого цвета при фокусировке/нажатии и выглядит довольно плоской (вокруг нее нет границ, поэтому она выглядит как изображение).

Я googled и увидел, что вы можете назначить селектора, как описано здесь, но это означало бы, что я должен указать изображение на состояние кнопки, а я не хочу этого делать. Я хочу наследовать фокусы/нажатые цвета из темы, но перезаписать обычный фон кнопки (если не нажат/сфокусирован) на прозрачный, а не серый. Как я могу это достичь? Представьте рабочий пример, поскольку я пробовал много разных комбинаций без успеха.

Edit Спасибо всем за помощь. Я понял, как сделать эту работу без необходимости воссоздавать одно и то же изображение с сосредоточенными и нажатыми состояниями для каждой кнопки!

Вот мое решение:

Моя кнопка определяется как:

<ImageButton
            android:id="@+id/ImageButton05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/button" />

И мой фоновый XML файл (под названием button.xml) определяется следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_pressed_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item android:state_focused="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_focused_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item android:state_hovered="true">
        <layer-list>
            <item android:drawable="@drawable/btn_default_focused_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item android:drawable="@drawable/btn_default_normal_holo_light"></item>
            <item android:drawable="@drawable/network_wifi"></item>
        </layer-list>
    </item>
</selector>

Ответ 1

Я хочу наследовать фокусы/нажатые цвета из темы, но перезаписать обычный фон кнопки (если не нажат/сфокусирован) на прозрачный, а не серый. Как я могу достичь этого?

AFAIK вы не можете, потому что фокус/нажатые цвета встроены в те же ресурсы изображения, которые содержат серый фон.

Если вы хотите, чтобы система фокусировалась/нажата, но удаляла фон, вам нужно будет захватить копию ресурсов изображения (которые можно найти в вашем SDK в /sdkroot/platforms/[version]/data/res/drawable-hdpi заменить [версия] любым уровнем api после. И если нужно заменить hdpi другой плотностью) и отредактируйте серая кнопка от них с помощью редактора фотографий. Затем сделайте селектор, который ссылается на ваши измененные изображения, и установите его в качестве фона для вашей кнопки.

EDIT: Здесь представлены изображения кнопки голограммы по умолчанию для сфокусированных и нажатых

focused

pressed

Ответ 2

Вы можете поместить что-то в файл xml, например, custom_button.xml, а затем установить background="@drawable/custom_button" в виде кнопки.

Пожалуйста, обратитесь к этой ссылке, так как есть пример xml: Стандартная кнопка Android с другим цветом

Я использовал его в своем коде, и он работал так, как я хотел.

Ссылка: Стандартная кнопка Android с другим цветом


Отредактировано:

Если вы предпочитаете использовать Может быть, вы должны попытаться установить границу. Например (ссылка: Android - граница для кнопки):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00"
    android:angle="270" />
  <corners android:radius="3dp" />
  <stroke android:width="5px" android:color="#000000" />
</shape>

ИЛИ, Вы можете попробовать установить стиль/тему для кнопки. (Но это было бы в отдельном файле) Стиль/тема содержит атрибуты цвета для различных состояний кнопки, такие как сфокусированные/включенные/отключенные/и т.д.

Для настройки цвета фона/изображения и эффекта щелчка, Вот пример (Ссылка: Как программно установить атрибут стиля в виде)

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

Затем вы можете применить этот селектор к кнопке, установив свойство android: background = "@drawable/my_button".

Ответ 3

Вы можете использовать ImageView вместо ImageButton, чтобы решить вашу проблему. Установите свойство android: background для ImageView в цвет фона родителя.

Ответ 4

Вы можете записать это в свой XML файл:

android:background="@null"

Это сработало для меня.

Ответ 5

Если вам не нужен серый фон по умолчанию, и вам нужно, чтобы ваш ImageButton выглядел как значок без фона, просто используйте атрибут android: background и установите его

@android:color/transparent** 
<ImageButton
android:id="@+id/ImageButton05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:background="@drawable/button" />

надеюсь, что кто-нибудь поможет