【问题标题】:how to change font color in selected/focused ListView items?如何更改选定/聚焦的 ListView 项目中的字体颜色?
【发布时间】:2011-04-24 10:56:17
【问题描述】:

我正在为此苦苦挣扎,这显然是一个非常简单的效果,但令人难以置信的是在 Android 中还没有找到任何直观的方法。

我有一个 ListView 并且我设法自定义背景图像,以便通过获取新的背景可绘制对象来突出显示所选项目。为此,我创建了一个新样式,我将 android:listSelector 属性设置为指向一个 StateListDrawable,在该样式中我指定了用于每个状态的可绘制对象。

但是,每个 ListView 项目都是一个 LinearLayout,其中我有两个 TextView。我的目标是能够在选择或按下父级时更改这些子视图的文本颜色,同时与背景可绘制对象同时进行。我知道有一个 ColorStateList,但没有成功设置它。

有没有人成功让这样的东西工作?

谢谢。

【问题讨论】:

  • 关于这方面的信息并不多——当我为 ListView 使用自定义背景时,我遇到了同样的问题,当用户成功选择了一个项目时,它对用户来说是不明显的。谢天谢地view 挽救了这一天。我在下面留下了一个答案 - 很好的问题,但我知道你的问题会让社区变得更好。

标签: android listview layout


【解决方案1】:

当您的 ListView 受到具有多个视图的布局的影响时,这些都不是可能的答案。您需要将子视图设置为:

android:duplicateParentState="true"

现在您可以使用上面其他人描述的方法来使用选择器声明您的 TextViews 的颜色,例如:

android:textColor="@drawable/my_row_selector"

我相信你已经知道了,但是选择器可以很简单:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/white" />
    <item android:color="@color/black" />
</selector>

如您所见,@color 值是允许的。希望这会有所帮助。

另外 - android:state_pressed 与 AdapterView.OnItemClickListener 结合使用。

【讨论】:

  • 谢谢。也适用于花哨的选择模式等。我只是设置了我的文本选择器的状态以匹配列表选择器中的状态。 duplicateParentState 是关键。
  • @AndrewPK 老兄,你太棒了!
  • 它不适用于 droid 4.3,4.4 焦点文本颜色与正常颜色相同
【解决方案2】:

在你的文本视图属性中

android:textColor="@color/text_selector"

分辨率/颜色 text_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="YOUR_CUSTOM_COLOR" />
    <item android:state_selected="true" android:color="YOUR_CUSTOM_COLOR" />
    <item android:color="YOUR_CUSTOM_COLOR" />
</selector>

【讨论】:

  • 我试过了,效果很好 schemas.android.com/apk/res/android">
  • 为了进行选择,请使用以下代码:&lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;item android:state_pressed="true" android:color="#fff"/&gt; &lt;item android:state_activated="true" android:color="#fff"/&gt; &lt;item android:color="#000" /&gt; &lt;/selector&gt;
  • 它不适用于 droid 4.3,4.4 焦点文本颜色与正常颜色相同
【解决方案3】:

为了使其在选择中起作用,请使用以下代码:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

显然关键是state_activated="true" state。

【讨论】:

    【解决方案4】:

    当您为 Android 11+ (HoneyComb+) 部署应用程序时,您应该使用

    android:state_activated="true"
    

    对于选定的列表状态。 对于早期版本,请使用以下组合:

    android:state_checked="true"
    android:state_activated="true"
    

    当然不要忘记包含

    android:duplicateParentState="true"
    

    因此视图可以从父列表视图项中获取激活/选中状态

    【讨论】:

      【解决方案5】:

      您也可以创建一个res/color 文件夹并使用以下行添加一个文件“text_selector.xml”:

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_activated="true" android:color="#f0f"/>
          <item android:state_pressed="true" android:color="#f0f"/>
          <item android:color="#000"/>
      </selector>
      

      之后在 TextView 中赋值:

      android:textColor="@color/text_selector"
      

      【讨论】:

      • 很好的解决方案,我尝试使用一个不起作用的可绘制选择器。
      • @Mr.Fish,谢谢!
      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 2023-03-07
      • 2015-12-11
      • 2015-01-07
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多