Как изменить фоновое изображение кнопки при нажатии / фокусировке?
Я хочу изменить фоновое изображение кнопки при нажатии или фокусировке.
Это мой код:
Button tiny = (Button)findViewById(R.id.tiny);
tiny.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Button tiny = (Button)findViewById(R.id.tiny);
tiny.setBackgroundResource(R.drawable.a9p_09_11_00754);
TextView txt = (TextView)findViewById(R.id.txt);
txt.setText("!---- On click ----!");
}
});
Правильно ли этот код? Вызывает ли он кнопку своего события?
9 ответов
Вы можете реализовать в XML-файл для этого следующим образом:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/your_imagename_while_focused"/>
<item android:state_pressed="true" android:drawable="@drawable/your_imagename_while_pressed" />
<item android:drawable="@drawable/image_name_while_notpressed" /> //means normal
</selector>
Теперь сохраните этот XML-файл в папке Drawable и назовите его, предположим, abc.xml и установите его следующим образом
Button tiny = (Button)findViewById(R.id.tiny);
tiny.setBackgroundResource(R.drawable.abc);
Надеюсь, это поможет вам.:)
Его очень легко реализовать. Для этого вам нужно создать один XML-файл (файл селектора) и поместить его в папку Drawable в Res. После этого установите файл XML на фоне кнопки в файле макета.
button_background_selector.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/your_hover_image" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/your_hover_image" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/your_hover_image"/>
<item android:drawable="@drawable/your_simple_image" />
</selector>
Теперь установите вышеуказанный файл в фоновом режиме кнопки.
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/grey_text"
android:background="@drawable/button_background_selector"/>
Извините, это неправильно.
Для изменения цвета фона / изображения в зависимости от конкретного события (фокус, нажатие, обычное изображение) необходимо определить файл селектора кнопки и реализовать его в качестве фона для кнопки.
Например: button_selector.xml (определите этот файл в папке drawable)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#000000" /> <!-- pressed -->
<item android:state_focused="true"
android:color="#000000" /> <!-- focused -->
<item android:color="#FFFFFF" /> <!-- default -->
</selector>
<!-- IF you want image instead of color then write
android:drawable="@drawable/your_image" inside the <item> tag -->
И применять его как:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawable="@drawable/button_selector.xml" />
Используйте этот код для создания XML-файла в папке с именем для рисования: кнопка
<?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/buutton_pressed" />
<item
android:drawable="@drawable/button_image" />
</selector>
а в кнопке xml файл
android:background="@drawable/button"
Чтобы изменить фон кнопки, мы можем использовать 2 метода
В кнопку OnClick, просто добавьте этот код:
public void onClick(View v) { if(v == buttonName) { buttonName.setBackgroundDrawable (getResources().getDrawable(R.drawable.imageName_selected)); } }
2. Создайте button_background.xml в папке drawable.(Используя xml)
res -> drawable -> button_background.xml
<?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tabs_selected" /> <!-- selected--> <item android:state_pressed="true" android:drawable="@drawable/tabs_selected" /> <!-- pressed--> <item android:drawable="@drawable/tabs_selected"/> </selector>
Теперь установите указанный выше файл в фоновом файле кнопки.
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_background"/> (or) Button tiny = (Button)findViewById(R.id.tiny); tiny.setBackgroundResource(R.drawable.abc);
2-й способ лучше для установки фоновой кнопки fd
Вам просто нужно установить фон и дать файл предыдущие.xml в качестве фона кнопки в вашем файле макета.
<Button
android:id="@+id/button1"
android:background="@drawable/previous"
android:layout_width="200dp"
android:layout_height="126dp"
android:text="Hello" />
and done.Edit Ниже приведен предыдущий файл.xml в директории drawable
<?xml version="1.0" encoding="utf-8"?>
<item android:drawable="@drawable/onclick" android:state_selected="true"></item>
<item android:drawable="@drawable/onclick" android:state_pressed="true"></item>
<item android:drawable="@drawable/normal"></item>
используйте <androidx.appcompat.widget.AppCompatButton/> вместо «Кнопка»
- Создайте файл в drawable play_pause.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/pause" />
<item android:state_selected="false"
android:drawable="@drawable/play" />
<!-- default -->
</selector>
- В xml файле добавьте этот ниже код
<ImageView
android:id="@+id/iv_play"
android:layout_width="@dimen/_50sdp"
android:layout_height="@dimen/_50sdp"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:background="@drawable/pause_button"
android:gravity="center"
android:scaleType="fitXY" />
- В java файл добавьте этот ниже код
iv_play = (ImageView) findViewById(R.id.iv_play);
iv_play.setSelected(false);
а также добавить это
iv_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
iv_play.setSelected(!iv_play.isSelected());
if (iv_play.isSelected()) {
((GifDrawable) gif_1.getDrawable()).start();
((GifDrawable) gif_2.getDrawable()).start();
} else {
iv_play.setSelected(false);
((GifDrawable) gif_1.getDrawable()).stop();
((GifDrawable) gif_2.getDrawable()).stop();
}
}
});
Вы также можете создавать фигуры прямо внутри item
тег, на случай, если вы хотите добавить больше деталей к вашему виду, например так:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#81ba73" />
<corners android:radius="6dp" />
</shape>
<ripple android:color="#c62828"/>
</item>
<item android:state_enabled="false">
<shape>
<solid android:color="#788e73" />
<corners android:radius="6dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="#add8a3" />
<corners android:radius="6dp" />
</shape>
</item>
</selector>
Помните, что Android будет циклически перемещаться по элементам сверху вниз, поэтому вы должны поместить item
без условия внизу списка (так что он действует как дефолт / резерв).