【问题标题】:Using ColorStateList in Android Java code在 Android Java 代码中使用 ColorStateList
【发布时间】:2011-09-17 07:40:38
【问题描述】:

我有一个包含项目的列表和 2 个颜色列表状态,一个用于赔率,一个用于偶数。 基本上,它就像这样:

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

如何将 colorliststate 应用到项目?在布局中,没有奇数或偶数的概念,所以我不能。在 java 代码中,一旦我加载它,我就找不到使用 colorliststate 的方法:

getContext().getResources().getColorStateList(R.color.list_even);

有什么想法吗?

【问题讨论】:

  • 其实解决办法好像是在一个values xml文件中定义颜色,然后在xml drawables selectors中使用这些
  • 我的理解是答案基本上是这个stackoverflow.com/questions/3592780/…

标签: android background-color


【解决方案1】:

你可以使用:

// you must place your file in the res/color folder
widget.setTextColor(getContext().getResources().getColor(R.color.list_even));

如果您使用的是 XML,或者只是将其放在 textColor 属性中:

<SomWidget
    android:textColor="@color/list_even"/>

【讨论】:

  • 实际上似乎不适用于背景。它一直说没有可绘制的属性
【解决方案2】:

首先定义两个不同的选择器drawable。您可以在可绘制 xml 中引用 color.xml 或直接输入颜色值。用color.xml比较花哨。

第二 我猜你有 ListAdapter 实现。因此,在您的 getView(..) 实现中,您可以为奇数和偶数项设置不同的背景可绘制对象。我猜您想修改背景而不是文本颜色,因为您发布了一个引用按下状态的示例。

用代码表示,这里没有 eclipse 和完全正确的语法:

if (position % 2 == 0) {
  view.setBackGroundDrawable(R.drawable.selector1);
}
else {
  view.setBackgroundDrawable(R.drawable.selector2);
}

我的例子符合你的要求吗?

【讨论】:

  • 不完全。我想出了 setBackgroundDrawable 部分,但我不知道如何处理 colorListState。
  • 你的意思是我应该先定义颜色,然后在选择器中将它们用作可绘制对象?
  • 我的意思是你不需要选择器。我认为您想通过偶数/奇数状态调整颜色,这无法通过选择器反映。您需要在列表适配器中设置所需的颜色。也许您可以调整您的问题以阐明您想要实现的目标。
  • 如问题中所述,还有按下/未按下会改变颜色的问题(据我所知,这是使用状态列表选择器解决的)
  • 好吧,我明白你的意思了。我编辑了这个问题。有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 2013-07-24
  • 1970-01-01
  • 2011-04-25
  • 2012-08-03
  • 1970-01-01
  • 2020-03-23
相关资源
最近更新 更多