先说一下我的需求:6个按钮,默认是灰色,没有点击效果。在其他页面设置一些状态后,对应按钮高亮,并有点击效果。

添加点击效果,首先想到的就是selector,写一个xml,通过setBackground动态添加即可,可是字体颜色动态添加怎么做?

一、在res文件夹中建立color文件夹,在color文件中写一个selector用来添加点击效果。

例:新建seat_memory_font_selector.xml

<?xml version="1.0" encoding="utf-8"?>        

二、在代码中添加,有两种方式

1.在xml布局中直接添加,如下:

android:textColor="@color/seat_memory_font_selector"

2.在java中动态添加(这个地方坑我一下午,此博客就为了纪念这个方法

错误写法,此方法即使使用了selector,返回的也只是一种颜色,也不会有点击时改变字体颜色的效果

btn.setTextColor(getResources().getColor(R.color.seat_memory_font_selector));

正确写法,

btn.setTextColor(getResources().getColorStateList(R.color.seat_memory_font_selector));

getColorStateList查看源码,介绍如图:

大体意思就是:返回一个ColorStateList对象,该对象包含一个单色或多个颜色,这些颜色可以基于状态进行选择

背景和字体可以同时设置,即setBackground和setTextColor可以一起使用selector效果:

    public void setBtnBg(Button btn){        btn.setBackground(getResources().getDrawable(R.drawable.seat_memory_selector));        btn.setTextColor(getResources().getColorStateList(R.color.seat_memory_font_selector));    }

三、整理了一些selector文件时常用的一些属性,这些属性可以理解为switch判断,当满足了一个条件后,就不会再向下执行了,所以在写selector时item顺序也很重要。

    android:drawable 放一个drawable资源
    android:color 放一个color资源
    android:state_pressed 是否按下,如一个按钮触摸或者点击。
    android:state_focused 是否取得焦点,比如用户选择了一个文本框。
    android:state_hovered 光标是否悬停,通常与focused state相同,它是4.0的新特性
    android:state_selected 被选中,它与focus state并不完全一样,如一个list view 被选中的时候,它里面的各个子组件可能通过方向键,被选中了。
    android:state_checkable 组件是否能被check。如:RadioButton是可以被check的。
    android:state_checked 被checked了,如:一个RadioButton可以被check了。
    android:state_enabled 能够接受触摸或者点击事件
    android:state_window_focused 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了

 

菜鸟踩坑,如有大神请指点!!!

更多相关文章

  1. Android:自定义输入框光标颜色
  2. Android避免反复弹出同一Toast
  3. Android(安卓)禁止ViewPager的滑动效果
  4. Android应用实例(一)之---有道辞典VZ.0
  5. 【Android】按钮设置字母不全部大写,button set text to lower ca
  6. Android引导界面设计之ParallaxViewPager视差效果
  7. android之tween动画详解
  8. Android如何屏蔽滑动控件滑到尽头时的阴影效果
  9. Android实现动态高斯模糊效果示例代码

随机推荐

  1. Android中滑屏初探 ---- scrollTo 以及 s
  2. (8 Android) 用户界面UI设计
  3. Android单元测试 - 如何开始?
  4. Android(安卓)Activity启动模式分析
  5. Android(安卓)zipalign: error while loa
  6. android中listview的setAdapter()和getAd
  7. RK3288 android 7.1 EMMC 问题导致卡死在
  8. Android简单调用相机Camera功能,实现打开
  9. Android(安卓)Toolchain与Bionic Libc
  10. android中判断横屏或者竖屏并改变背景