android 中改变按钮按下时的颜色

本文详细介绍了在Android应用开发中如何通过抽取样式、使用selector来实现按钮的高亮效果及按钮获得焦点时的颜色变化。包括按钮在不同状态下的样式调整,以及如何避免重复点击的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


大家在开发一定遇到过这样的情况,当选中某个按钮时让它处于高亮显示:下面我们就一起讨论一下:

a、在开发中大家都会遇到这样情况,在一个xxx.xml文件中如果有两个以上的组件有一样的属性功能时,可以把它们共同的内容抽取出来放在styles.xml文件来声明。

然后在相应的组件中可以这样引用 : style="@style/widget_listview"

style标签也可以这样来定义:res-----values------styles.xml

<style name="widget_listview">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_weight">1</item>
        <item name="android:listSelector">@drawable/listview_item_selector</item>
        <item name="android:divider">@drawable/listview_divider_line</item>
        <item name="android:dividerHeight">1.0dip</item>
        <item name="android:fadingEdge">none</item>
        <item name="android:scrollingCache">false</item>
    </style>


b、在一个布局中如果有一组按钮在相应的被选中时改变颜色(这组按钮不是数组),此时可以这样定义:在drawable 文件下添加一个selector_btn.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:drawable="@drawable/frame_button_n"></item> <!-- 正常情况下 -->
    <item android:state_enabled="false" android:drawable="@drawable/frame_button_p"></item> <!-- 按下时按钮的变化 -->
</selector> 


在引用时可以直接用 android:background="@drawable/selector_btn" ,注意红色部分的属性,不能写成 state_pressed 这个属性,为了防止界面中重复点击按钮事件,所以在单击按钮时可以这样来传入

  articleManager.setOnClickListener(frameArticleBtnClick(articleManager, 1));
  /**
     * @param btn
     * @param flag
     *            记录哪个按钮被选中
     * @return 当按下相应的按钮时颜色发生变化,并且该按钮处于不可重复点击状态
     */
    private OnClickListener frameArticleBtnClick(final Button btn, final int flag) {
        return new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (btn == articleManager) {
                    articleManager.setEnabled(false);
                } else
                    articleManager.setEnabled(true);
                if (btn == articleTypeManager) {
                    articleTypeManager.setEnabled(false);
                } else
                    articleTypeManager.setEnabled(true);
                currentFlagBtn = flag;
            }
        };
    }


c.这样就可以显示出按钮高亮的效果了

(2) 对于按钮的操作还有另一种情况:
当按钮获得焦点时,让它改变颜色,当失去焦点时在还原,同样也是在drawable 目录下创建一个 .xml 文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/btn_bg_press" android:state_pressed="true"/><!-- 获得焦点时的动作 -->
    <item android:drawable="@drawable/btn_bg_normal"/><!-- 正常情况下 -->

</selector>

在程序中引用时  android:background="@drawable/btn_bg_selector" 即可。


### 更改 Android Studio 中 Bottom Button 的颜色Android Studio 中,可以通过多种方式更改 `Button` 控件的颜色。以下是实现这一目标的具体方法: #### 方法一:通过 XML 属性直接设置背景颜色 可以直接在布局文件中使用 `android:background` 属性为按钮指定一种纯色作为背景颜色。例如: ```xml <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="底部按钮" android:background="#FF5722" /> <!-- 设置橙色背景 --> ``` 这种方法简单快捷,适用于只需要单一颜色的情况[^1]。 --- #### 方法二:定义渐变或复杂样式 如果需要更复杂的背景效果(如渐变),可以创建一个自定义的 drawable 文件并将其应用到按钮上。具体步骤如下: 1. **创建 Drawable 资源文件** 在 `res/drawable/` 目录下新建一个名为 `button_background.xml` 的文件,并定义渐变或其他视觉效果: ```xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#FFFFBB33" android:endColor="#FFFF4444" android:angle="270"/> <corners android:radius="10dp"/> <!-- 可选:添加圆角 --> </shape> ``` 2. **将资源应用于按钮** 将上述 drawable 应用于按钮的 `android:background` 属性: ```xml <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="底部按钮" android:background="@drawable/button_background" /> ``` 此方法适合需要高级视觉设计的应用场景[^3]。 --- #### 方法三:动态修改颜色(Java/Kotlin) 也可以在运行通过代码动态改变按钮颜色。以下是一个 Kotlin 示例: ```kotlin val button = findViewById<Button>(R.id.button) button.setBackgroundColor(Color.parseColor("#FF5722")) // 动态设置颜色 ``` 或者使用 Java 实现相同功能: ```java Button button = findViewById(R.id.button); button.setBackgroundColor(Color.parseColor("#FF5722")); // 动态设置颜色 ``` 这种方式特别适合根据用户交互实调整界面元素外观的需求[^2]。 --- #### 方法四:使用 StateListDrawable 定义不同状态下的颜色 为了支持不同的 UI 状态(如按下、禁用等),可以使用 `<selector>` 来定义多状态背景。例如,在 `res/drawable/` 下创建 `btn_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:color="#FFEB3B"/> <!-- 按压状态 --> <item android:state_enabled="false" android:alpha="0.5" android:color="#9E9E9E"/> <!-- 禁用状态 --> <item android:color="#FF5722"/> <!-- 默认状态 --> </selector> ``` 然后将其绑定到按钮的 `android:backgroundTint` 或 `android:background` 属性: ```xml <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="底部按钮" android:backgroundTint="@drawable/btn_selector" /> ``` 这种技术能够增强用户体验,因为可以根据用户的操作提供即反馈。 --- ### 总结 以上四种方法分别针对静态颜色设定、动态颜色变化以及基于状态的变化提供了解决方案。开发者应根据实际需求选择最适合的方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值