gpt4 book ai didi

android - 如何为 3 种不同状态设置按钮样式

转载 作者:行者123 更新时间:2023-11-29 23:52:14 28 4
gpt4 key购买 nike

我正在尝试创建我自己的 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com