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. python解除windows锁屏_实战 | Python批量提取Win10锁屏壁纸
  2. python实现shell_基于 Python 的简易 Shell 实现
  3. java简单的异常_Java的简单理解(8)-异常(Exception)
  4. Netty(一) SpringBoot 整合长连接心跳机制
  5. 使用PowerShell 链接Azure 查看信息
  6. html 点击div 改变高度,HTML / CSS将div设置为同级的高度
  7. HDU 4027 Can you answer these queries?(线段树/区间不等更新)
  8. 查看未提交事务或sleep session最后执行的sql语句
  9. Resource punkt not found
  10. JavaScript实现限制文件上传类型和大小
  11. 为什么有人说开车时,最能看出一个人的情商和潜力?
  12. Entity Framework 5自动生成ObjectContext或者DbContext的设置
  13. php物联网github,工欲善其事必先利其器,清点Github上那些优异的PHP项目
  14. 科沃斯扫地机器人电路原理图_科沃斯扫地机器人不工作故障维修(CEN550)
  15. 数据库服务器上导出dmp文件在哪里,sql数据库导出表dmp文件
  16. ROS机器人操作系统——订阅者Subscriber的编程实现(五)
  17. 基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程
  18. 目前商店巡店督导遇到的问题要怎么管理
  19. TYPEC 转HDMI VGA+PD+ USB3.0 HUB+TF/CF/SD+RJ45等多功能扩展坞方案设计资料|TYPE-C转HDMI转VGA带PD USB3.0多功能拓展器方案介绍
  20. Sass的概念以及命令

热门文章

  1. 复合维生素的功效和作用是哪些?每天吃维生素有什么好处?
  2. Stm32标准库函数3——BlueTooth 蓝牙通讯测试 Stm32中继
  3. 微信小程序-实现手机号码中间四位显示为*号
  4. php 用积分兑换_PHP积分兑换接口实例
  5. AnyCast技术浅析
  6. 系统分析师备考经验分享(附上备考方法)
  7. 有效的学习——顾问式销售团队学习总结
  8. 婚恋系统交友系统婚恋交友平台搭建红娘加盟积分充值兑换个人资料置顶同城交友系统
  9. 关于2.5G网络速率的理解与对应2.5G芯片RTL8156B运用。
  10. flutter: Skipped 32 frames! The application may be doing too much work on its main thread.