Android使用selector修改TextView中字体颜色和背景色的方法
作者:chenguang79 发布时间:2021-06-19 17:28:18
本文实例讲述了Android使用selector修改TextView中字体颜色和背景色的方法。分享给大家供大家参考,具体如下:
android中的selector大家都很熟悉了,用它可以很方便的实现,控件在不同的动作中,颜色等值的变化。这里我说一下TextView中的一些应用。
我想大家都知道,Button按钮在源码上看是一种特殊的TextView,所以我们很多时候,按钮全是使用的TextView来完成,只要加一个android:clickable="true"就可以了。
TextView在使用selector时,会有两种情况,一种就是正常的在TextView控件上来判断按下,焦点等动作的判断,另一种则是TextView外层控件的这些动作,然后将动作传回TextView.
一,正常的在TextView控件上来判断按下,焦点等动作的判断
这种相对简单,一般要修改控件的背景色和文字色,我们要用到两个xml文件。代码如下:
tbackground.xml 修改背景
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<!--<item android:drawable="@color/white" />-->
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false" android:drawable="@color/white" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@color/btnbackBlue" />
</selector>
这里要说明一点,大家看到了,我把默认时的背景图片(颜色)给注了,这是为什么呢,因为你把这条放在最前面,无论什么时候,它都会最先运行,它运行完了,程序就不会再往下运行了,所以下面写的全都没有了。如果你想设置默认值,请把这行代码,放到最下面。
ttextcolor.xml 修改文字
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false" android:color="@color/black" />
<item android:state_focused="false" android:state_pressed="true" android:color="@color/white" />
<!-- 默认时的背景图片-->
<item android:color="@color/black" />
</selector>
文字的修改我就把默认值,放到了最后,这里也要说一下,背景我们要用android:drawable而文字的颜色要使用android:color,不然会报错,为什么?大家想想。哈哈。。。。
<TextView
android:id="@+id/txt_collection_cancel"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="取消"
android:textColor="@drawable/ttextcolor"
android:gravity="center"
android:background="@drawable/tbackground"
android:clickable="true"/>
二,TextView外层控件的这些动作,然后将动作传回TextView.
这种情况也常出现,我们一般会在外层加一个LinearLayout或是RelativeLayout。而我们会把点击的事件,给这个外层控件。这时候,你要修改的就是外层控件的背景,和TextView控件的文字颜色。这个时候,我们还用上面的方式,你会发现,TextView没有反应,为什么,因为它没有得到事件,这个时候,会用到一个属性就是android:duplicateParentState
它的官方解释是”如果设置此属性,将直接从父容器中获取绘图状态(光标,按下等)。 注意仅仅是获取绘图状态,而没有获取事件,也就是你点一下LinearLayout时Button有被点击的效果,但是不执行点击事件“。看下面的代码:
<RelativeLayout
android:id="@+id/rela_collection_add"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/tbackground"
android:clickable="true">
<View
android:id="@+id/line_collection_add"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@color/gray"
android:layout_gravity="center_vertical"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/txt_collection_add"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="新建收藏夹"
android:textColor="@drawable/ttextcolor"
android:textSize="@dimen/ActionBar_title_size"
android:duplicateParentState="true"
android:gravity="center"
android:layout_above="@+id/line_collection_add"
/>
</RelativeLayout>
我们在修改外层控件背景的同时,也在修改 TextView文字的颜色.
希望本文所述对大家Android程序设计有所帮助。
猜你喜欢
- 使用ApplicationContext获取bean对象编写一个ApplicationContextFactory工厂类public cla
- 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如何控制S
- 一、Spring Boot任务线程池线程池的作用防止资源占用无限的扩张调用过程省去资源的创建和销毁所占用的时间在高并发环境下,不断的分配新资
- 什么事读写分离读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELEC
- 上次面试中遇到的一个问题,问到System.out.println()中的out是不是内部类,当时就给问蒙了,直观感觉out应该是Syste
- 利用Java语言中的集合、Swing、线程等知识点编写一个坦克大战游戏。(1) 画出敌我坦克的原理:在坦克类里面有一个布尔类型变量good。
- 目录方案一,更改启动项方案二,禁用检查应用程序的CAS发布者策略方案一,更改启动项出问题应用的启动项是使用的默认设置,查看App.g.cs文
- 本文实例讲述了java 线程方法join简单用法。分享给大家供大家参考,具体如下:虽然关于讨论线程join方法的博客已经很多了,不过个人感觉
- 1. 测试文档、期望达到的目标文档效果用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性:目标文档效果:2. 辅助工具2
- 以前使用MyEclipse已经习惯了,后来改成Eclipse感觉怪怪的。在创建web项目之前首先配置好jdk环境和tomcat环境(即在开发
- 本文实例讲述了Android使用shape使组件呈现出特殊效果的方法。分享给大家供大家参考,具体如下:使用到的布局文件<?xml ve
- 在Scala中调用java的方法,很简单,直接导入传递参数就可以进行调用了.在Java中调用Scala的方法呢?经过测试,也是很简单,静态方
- 自定义封装StringUtils常用工具类,供大家参考,具体内容如下package com.demo.utils;import java.u
- 前言在实际开发中,大多数情况下都需要对 SQL 传入参数以获得想要的结果集,传入的情况分为两种情况:1、SQL语句的拼接,比如表名、like
- 一、传递参数既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更
- requestFoucs();无效。requestFoucsFromTouch();无效。webview.setTouchListener;
- 类加载器类加载器作用负责将.class文件(存储的物理文件)加载到内存中类加载器过程加载:通过全类名获取这个类准备用流传输,加载进内存,加载
- 在学习MyBatis过程中想实现模糊查询,可惜失败了。后来上百度上查了一下,算是解决了。记录一下MyBatis实现模糊查询的几种方式。 数据
- 本文讲述了Java递归运行的机制:递归的微观解。分享给大家供大家参考,具体如下:前言:在java递归基础与递归的宏观语意和java链表的天然
- SSO :同一个帐号在同一个公司不同系统上登陆 使用SpringSecurity实现类似于SSO登陆系统是十分简单的 下面我就搭