对于 selected_state,textview 背景不会改变

Posted

技术标签:

【中文标题】对于 selected_state,textview 背景不会改变【英文标题】:textview background does not change for the selected_state 【发布时间】:2013-08-10 08:11:02 【问题描述】:

我的布局中有一些文本视图。我想更改所选文本视图的颜色。我认为 textview 是不可选择的,但无论如何我可以设置释放状态的背景?

这是我的文本视图:

<TextView
                android:id="@+id/langDutch"
                android:layout_
                android:layout_
                android:background="@drawable/item_selected"
                android:clickable="true"
                android:drawableLeft="@drawable/bg_settings_dutchon_hc_2x"
                android:drawablePadding="10dp"
                android:focusable="true"
                android:gravity="center_vertical"
                android:onClick="onlanguageSelect"
                android:padding="10dp"
                android:text="Dutch"
                android:textColor="#454C52" />

这是我的 item_selected.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/background_grey" android:state_pressed="true"/>
    <item android:drawable="@color/background_hc" android:state_focused="true"/>
    <item android:drawable="@color/background_bf" android:state_selected="true"/>

</selector>

【问题讨论】:

developer.android.com/guide/topics/resources/… 您确定这三种不同的颜色在您的 strings.xml 文件中吗? @Mobstaa 是的,有颜色。 你可以尝试使用 android:background 代替 android:drawable 吗? @Mobstaa 项目不支持背景 【参考方案1】:

首先在布局中改变这个,以便使用选择器:

android:background="@drawable/item_background"

然后在其中写下这个(考虑到你只想要背景,当它被取消选择和默认时):

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

这些是针对两种可能的状态 - 聚焦和非聚焦(按下/未按下)。

【讨论】:

【参考方案2】:

您可以将onClickListner 添加到TextView 并像这样更改背景:

textView.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                v.setBackgroundColor(color);
            
        );

【讨论】:

是的,我也有同样的想法,但问题是,我需要迭代并取消选择视图的其余部分。【参考方案3】:

您可以定义一个默认状态,即在给定状态都不为真时使用的默认状态。见下文 - 当没有其他状态为真时使用最后一项。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/background_grey" android:state_pressed="true"/>
    <item android:drawable="@color/background_hc" android:state_focused="true"/>
    <item android:drawable="@color/background_bf" android:state_selected="true"/>
    <item android:drawable="@color/background_released"/>

</selector>

【讨论】:

【参考方案4】:

在 onclick for textview 中,您必须调用 setSelected(true) 才能查看。 然后它会渲染 state_select 颜色

onclick(View v)
 v.setSelected(true);

【讨论】:

以上是关于对于 selected_state,textview 背景不会改变的主要内容,如果未能解决你的问题,请参考以下文章

java 添加指向TextView的链接。 Linkify。字体:https://stackoverflow.com/questions/4746293/android-linkify-textvie

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextVie

Android中的文本/布局对齐(textAlignment,gravity)

Android 怎么让TextView中的文本居于右下方

自定义ToastUtils

自定义ToastUtils