Подтвердить что ты не робот

ImageButton не выделяет клик с помощью Прозрачного фона

Я установил ImageButton для прозрачности, поэтому значок соответствует панели backgrond, такой как Android ActionBar. Это выглядит отлично, как я хочу.

Однако, когда фон прозрачен, нет синей линии, которую вы видите, когда вы нажимаете прозрачную кнопку на панели действий.

Могу ли я иметь ImageButton, который является прозрачным, а также имеет вспышку подсветки при нажатии?

<ImageButton
    android:id="@+id/nextItemButton"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@null"
    android:src="@drawable/ic_media_ff" />
4b9b3361

Ответ 1

Все, что вам нужно сделать, это установить правильный фон. Если вы хотите, чтобы он был прозрачным в нормальном состоянии, а синий - нажатым.

Создайте StateListDrawable, как этот, в директории res/drawable.

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

Таким образом, фон по умолчанию является прозрачным. При нажатии фон имеет цвет, который вы указали (вместо цвета вы можете использовать любые доступные здесь).

Ответ 2

Я столкнулся с этой проблемой. Наконец, я получил образец кода с этим атрибутом:

android:background="?android:selectableItemBackground"

Этот атрибут даст прозрачный фон с выделенной подсветкой для любого вида (Button, ImageButton, TextView...) БЕЗ БОЛЬШЕ КОДИРОВАНИЯ!!!

Ответ 3

Просто добавь на Фернандес хороший ответ:

Если вы хотите, чтобы эффект был круглым, а не прямоугольником, используйте:

android:background="?android:selectableItemBackgroundBorderless"    

(* для V21 и выше).

Ответ 4

Если вы хотите сделать это программно, вот одно из решений:

Создайте собственный ImageButton класс и переопределите drawableStateChange():

public class CustomImageButton extends ImageButton {

    @Override
    protected void drawableStateChanged() {
        Log.d("Button", "isPressed: " + isPressed() );
        if( isPressed() ){
            setBackgroundResource( android.R.color.holo_blue_dark );
        }  else {
            setBackgroundResource( android.R.color.transparent );
        }
        super.drawableStateChanged();

    }

    public CustomImageButton( Context context ) {
        super( context );
    }

    public CustomImageButton( Context context, AttributeSet attrs ) {
        super( context, attrs );
    }

    public CustomImageButton( Context context, AttributeSet attrs, int defStyle ) {
        super( context, attrs, defStyle );
        // TODO Auto-generated constructor stub
    }



}