- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建我自己的 Simon says 版本。我想为按钮创建三种状态(颜色);关闭(假),闪烁按下(真)。如果我使用 mButton1.setbackgroundColor(Color.Red)
,我会丢失 XML 按钮样式。如何在不丢失 XML 样式的情况下完成此操作,或者是否有更好的方法来设置按钮的样式。
最佳答案
您可以在 drawable
目录中创建 button selector
xml,如下所示。它定义了当按钮处于不同状态时使用的不同 drawable,例如:默认、按下等。
drawable/my_button_selector.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:drawable="@drawable/my_button_pressed" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/my_button_pressed" />
<!-- selected -->
<item android:state_selected="true" android:drawable="@drawable/my_button_pressed" />
<!-- default -->
<item android:drawable="@drawable/my_button_default" />
</selector>
然后,为不同的状态定义各自的drawable xml
:
drawable/my_button_default.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- define this color in your colors.xml -->
<solid android:color="@color/default_button_color"/>
<!-- this makes the rounded corners button -->
<corners android:radius="5dp" />
</shape>
drawable/my_button_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- define this color in your colors.xml -->
<solid android:color="@color/pressed_button_color"/>
<corners android:radius="5dp" />
</shape>
您现在可以在定义按钮
的xml
中使用drawable/my_button_selector
:
<Button
android:id="@+id/my_button"
android:background="@drawable/my_button_selector"
android:layout_width="200dp"
android:layout_height="160"
android:text="My Button" />
请注意,对于 API 级别 21 或更高级别
,您可以使用默认的 ripple
效果。将下面的 my_button_selector.xml
放在 drawable-v21
目录下:
drawable-v21/my_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_material_light">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:drawable="@drawable/my_button_default" />
</ripple>
对于 API 级别 21 或更高级别
,Android 将使用 v21/my_button_selector.xml
。对于低于该级别的 API,它使用 drawable/my_button_selector.xml
。
关于android - 如何为 3 种不同状态设置按钮样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50781761/
我是一名优秀的程序员,十分优秀!