当TextView获得焦点时,如何使其变为橙色?

3

我有一个TextView,我将其设置为可点击和可聚焦 - 当用户使用轨迹球等聚焦时,如何使其高亮显示为橙色(类似于按钮)?

TextView tv = ...;
tv.setClickable(true);
tv.setFocusable(true);

谢谢

2个回答

10

这很容易。以下是解决方案。

您有一个TextView元素,其背景属性设置为像这样的@drawable/tbselector

<TextView android:text="My text" 
    android:id="@+id/tv01"
    android:layout_width="300dip"
    android:layout_height="150dip"
    android:layout_gravity="center_horizontal"  
    android:background="@drawable/tbselector"/>

最后一个属性android:background是必要的,其他的东西由您决定。

现在您可以在drawable子目录中创建一个名为tbselector.xml的文件,其内容如下所示。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/bgdefault"
        android:state_focused="false"
        android:state_selected="false"/>
    <item
        android:drawable="@drawable/bgselected"
        android:state_focused="true"
        android:state_selected="false"/>
</selector>

现在,在你的drawable子目录中创建一个名为bgdefault.xml的文件,其内容如下。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="200dip"
        android:height="150dip"
        android:color="#00FF00"/>
    <solid
        android:color="#00FF00"/>
</shape>

最后,在您的drawable子目录中创建一个名为bgselected.xml的文件,它看起来与其他颜色值相同,例如:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="200dip"
        android:height="150dip"
        android:color="#FFFF00"/>
    <solid
        android:color="#FFFF00"/>
</shape>

这就是了,现在您拥有了一个状态相关的TextView背景。但是,您可以决定在选择器XML中设置自己的可绘制图像,完全取决于您。我的值只是随意设置的值,以便向您展示差异。

希望能对您有所帮助。


我要在加载时缩小200个TextView,这似乎需要太多的处理。 这样可以吗?还是我应该在touch / Focus监听器中执行它? - ankitjaininfo
说实话,我无法确定。我猜这样做不会比以编程方式处理更加复杂。如果你想尝试一下(前提是你有时间),并且把结果告诉我,那就太好了。 - Octavian Helm
这个问题很老了,但是有没有一种方法可以访问Android默认的焦点背景颜色? - Fender

0

目前我没有机会尝试它,但是你可以尝试给你的TextView添加一个OnFocusChangeListener,然后使用setBackgroundColor(int color)方法将背景色更改为橙色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接