selector的用法

android中selector主要用于在不同的状态下设置不同的背景或者不同的颜色。
selector分为两种类型,colorselector和drawableselector。colorselector用来在不同的状态下设置不同的颜色,而drawableselector用于在不同的状态下设置不同的背景。
selector文件中item的常见的状态主要有以下几种

状态 意义
android:state_selected 被选择时的状态
android:state_focused 获得焦点时的状态
android:state_pressed 被按压时的状态
android:state_enabled 控件能否处理touch或者click事件时的状态
android:state_active 激活状态,API11及以上才支持,可通过代码调用控件的setActivated(boolean)方法设置是否激活该控件
android:state_checkable 是否可以被checked的状态,只有像单选按钮、多选按钮的控件此状态才有效
android:state_checked 是否被选中时的状态,也只有在类似单选按钮、多选按钮这样的控件才有效
android:state_hovered 当光标移动到某一个控件时的状态
android:state_window_focused 当前界面是否得到焦点的状态

特别提醒:在匹配的时候,是从上往下匹配的,如果匹配到一个item就采用这个item,所以默认的状态要写在最后,防止后面的item没有被匹配。

下面是一个简单的例子:
MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private static final String TAG = MainActivity.class.getSimpleName();private EditText et1;private EditText et2;private TextView tv;private Button mBtn1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {tv = findViewById(R.id.tv);//强制TextView获取焦点tv.requestFocus();et1 = findViewById(R.id.et1);mBtn1 = findViewById(R.id.btn);mBtn1.setOnClickListener(this);tv.setOnFocusChangeListener(new View.OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {Log.d(TAG, "onFocusChange: " + hasFocus);}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn:tv.requestFocus();break;}}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageButtonandroid:id="@+id/ib"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="中华人民共和国万岁"android:layout_centerInParent="true"android:background="@drawable/selector_imagebutton"/><TextViewandroid:id="@+id/tv"android:layout_above="@id/ib"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginBottom="50dp"android:clickable="true"android:focusable="true"android:focusableInTouchMode="true"android:text="中华人民共和国万岁"android:textColor="@color/et_color"android:textSize="30sp" /><EditTextandroid:layout_width="100dp"android:layout_height="50dp"android:id="@+id/et1"android:layout_below="@id/ib"android:layout_marginTop="50dp"android:layout_centerHorizontal="true"android:textColor="@color/et_color"/><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击我改变焦点的位置"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"/></RelativeLayout>

et_color.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--设置的是EditText中文字的颜色--><item android:color="@color/black" android:state_focused="false"/><item android:color="@color/purple_200" android:state_focused="true"/></selector>

selector_imagebutton.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--当被按压时,背景设置为ic_launcher_foreground--><item android:state_pressed="true" android:drawable="@drawable/ic_launcher_foreground"/><!--当没有被按压时,背景设置为ic_launcher_background--><item android:state_pressed="false" android:drawable="@drawable/ic_launcher_background"/></selector>

可以发现,点击底部的按钮时,中华人民共和国万岁这几个字的颜色会发生变化;按压图片按钮时,图片按钮的背景图片会发生改变;在输入框输入文字时字体的颜色和焦点离开时文字的颜色是不一样的。

参考

  1. Selector中的各种状态详解
  2. Android 02 selector状态选择器

Android中的Selector相关推荐

  1. Android中的Selector的用法

    Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist_vie ...

  2. Android中selector的使用

    此文章转载来源于http://blog.csdn.net/wenwen091100304/article/details/49667293点击打开链接 引言 selector中文的意思选择器,在And ...

  3. Android中妙用Selector实现颜色图片切换效果

    在目前的安卓开发中,很多情况下,都会涉及到颜色变化,比如应用程序中下方的按钮,当我们点击按钮的时候,希望更换图片或者是按钮中的颜色发生变化,这种颜色的改变使得用户能够更加清晰的看到所处的"功 ...

  4. Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解...

    2019独角兽企业重金招聘Python工程师标准>>> 今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根 ...

  5. Android中项目中各个文件夹的含义和用途详解

    1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...

  6. Android中的Fragment

    文章目录 1 Fragment简介 1.1 设计思想 1.2 Fragment和Activity的区别 2 Fragment的生命周期 3 Fragment的静态加载和动态加载 3.1 Fragmen ...

  7. android:catation=quot;90quot;,Android中的AlarmManager的使用.htm

    var protocol = window.location.protocol; document.write(' Android中的AlarmManager的使用 - wangxingwu_314的 ...

  8. Android样式开发--selector

    Thanks to 转载自Keegan小钢 原文链接:http://keeganlee.me/post/android/20150905 上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩 ...

  9. android drawable 比例,Android中的Drawable基础与自定义Drawable

    转载请注明链接:http://blog..net/feather_wch/article/details/79124608 本文要点: 1. 介绍Android中Drawable的相关知识点,并且介绍 ...

最新文章

  1. 被“嫌弃”的AI药物设计
  2. win10下用Linux搭建pythonnodejs开发环境
  3. 相对最完整的软件测试工具手册
  4. WP8.1学习系列(第二十五章)——控件样式
  5. deeplearning URL
  6. react-router中的exact和strict
  7. 简单聊聊C#中lock关键字
  8. python线性链表_线性表 (单链表、循环链表-python实现)
  9. MySQL设置真正的UTF-8
  10. dadayi大一c语言累加编程题,c++习题答案中国电力出版社
  11. 揭秘Spark应用性能调优
  12. 网络中各层协议(7层)
  13. Atitit 小程序前端api艾提拉总结 索引 目录 1. 基础 37 2 1.1. 系统 38更新 38小程序 39调试 41定时器 42 2 2. 路由 43 2 3. 界面 44 2 3.1.
  14. SPSS常用方法及操作
  15. php网站设计思路,PHP开发之网页留言板的思路及设计
  16. Linux文件--文件命名规则
  17. 【Centos】查询命令
  18. 【软件测试】大厂测试开发你真的了解吗?测试开发养成记......
  19. 小Biu的区间和——UPC
  20. 20190904携程机试

热门文章

  1. mosh的安装和使用
  2. 无镉量子点|油溶性Cu掺杂ZnInS量子点PL500nm--700nm
  3. 跨越速运在行业里属于高质量发展的物流企业吗?
  4. python中BSON模块使用详解
  5. 七十年代译制片机器人的_【美国电影译制片《未来世界》1976年】
  6. 时间复杂度到底怎么算
  7. 计算代码时间复杂度方法
  8. mysql语句错误无法退出
  9. TCP三次握手和四次挥手
  10. mysql 列转行 unpivot_SQL 之列转行Unpivot函数