Android 如何在XML文件中设置选中/未选中按钮的背景
我有一些自定义按钮,它们应该有不同的背景,这取决于它们是否被选中。我想知道是否有办法在XML文件中声明这一点。我有一个摄氏度按钮和一个华氏度按钮。我希望它能工作,如果选择了一个,它会保持“按下”状态,无法点击,而另一个按钮可以按下Android 如何在XML文件中设置选中/未选中按钮的背景,android,xml,button,Android,Xml,Button,我有一些自定义按钮,它们应该有不同的背景,这取决于它们是否被选中。我想知道是否有办法在XML文件中声明这一点。我有一个摄氏度按钮和一个华氏度按钮。我希望它能工作,如果选择了一个,它会保持“按下”状态,无法点击,而另一个按钮可以按下 <Button android:id="@+id/celsiusButton" android:text="C" android:background="@drawable/
<Button
android:id="@+id/celsiusButton"
android:text="C"
android:background="@drawable/button_unpressed_shape"
android:layout_weight="3"
android:layout_height="match_parent"
android:layout_width="0dip"
android:gravity="center" />
<Button
android:id="@+id/fahrenheitButton"
android:text="F"
android:background="@drawable/button_unpressed_shape"
android:layout_weight="3"
android:layout_height="match_parent"
android:layout_width="0dip"
android:gravity="center" />
如果选择或未选择,则应使用切换按钮 请注意,仍有4个州可供选择 您可以在这样的选择器中定义它们
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/likeactivepressed" />
<item android:state_pressed="true" android:drawable="@drawable/likeinitialpressed"/>
<item android:state_checked="true" android:drawable="@drawable/likeon"/>
<item android:drawable="@drawable/likeinitial"/>
</selector>
android:background="@drawable/like_button"
编辑
实际上,你可以只使用一个按钮。或者,您可以使用2个单选按钮
是,您可以根据渲染视图的状态选择一个可绘制的
视图
这正是选择器的作用。请参见此处的示例和指南:
基本上,选择器的每个项定义了哪些状态具有哪些值。它还定义了表示这组值的drawable
接下来,您可以从代码中设置视图的状态,例如
celsiusButton.setPressed(true);
这在实践中非常有用,因为您将UI设置与模型/控制器分离。如果代码不负责以直接方式更改应用程序的UI,那么维护大型绘图集就更容易了
我的工作选择器的一个示例是:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_background_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/ic_background_focused" android:state_focused="true"/>
<item android:drawable="@drawable/ic_background_default" />
</selector>
此示例根据按钮的状态呈现按钮背景。这用于更改按钮在按下或聚焦时的颜色
在您的drawable文件夹中编写此代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Button Focused-->
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@drawable/login_hover"
/>
<!-- Button Focused Pressed-->
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/login_hover"
/>
<!-- Button Pressed-->
<item android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/login_hover"
/>
<!-- Button Default Image-->
<item android:drawable="@drawable/login_bg"/>
</selector
要更改背景图像,请执行以下操作:
public void onClick(View v) {
if(v == ButtonName) {
ButtonName.setImageResource(R.drawable.ImageName);
}
}
或者,使用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/login_selected" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/login_mouse_over" /> <!-- focused -->
<item android:drawable="@drawable/login" /> <!-- default -->
</selector>
谢谢,看起来真的很不错。要想让它工作,你必须按你的按钮。设置FocusableInTouchMode(true)
<?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/login_selected" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/login_mouse_over" /> <!-- focused -->
<item android:drawable="@drawable/login" /> <!-- default -->
</selector>
ButtonName.setBackgroundDrawable(getResources().getDrawable(R.drawable.ImageName));