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文字的颜色.


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值