Android中的getColor()和getColorStateList()有什么区别

时间:2019-06-13 10:34:18

标签: android colors android-resources

我正在使用getColor()方法从资源中选择颜色。但是我发现还有另一种称为getColorStateList()的方法。哪个易于使用,它们之间有什么区别?

2 个答案:

答案 0 :(得分:2)

让我们假设您要 setBackgroundColor 到一个视图,例如 linearLayout 。 如果希望其背景色永久不变,则可以使用 getColor()设置某些颜色。 但是如果您希望其颜色更改不同状态和事件(例如按下状态未按下状态),则需要设置 xml 文件,其中包含这些颜色更改任务的代码。

这是我在代码中所说的话

linearLayout.setBackgroundColor(getResources().getColor(R.color.red);
上面的代码行

将linearLayout的永久颜色设置为红色。

linearLayout.setBackgroundTintList(getResources().getColorStateList(R.drawable.layout_background));

上面的这一行代码将在按下布局时将背景色设置为红色,而在不按下布局时将背景色设置为白色。

layout_background.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
       android:color="@color/red" />
    <item android:state_pressed="false"
       android:color="@color/white" />
</selector>

答案 1 :(得分:0)

getColor() 返回与特定资源ID关联的颜色整数

getColorStateList() ColorStateList是从在应用程序资源目录的“ color”子目录目录中定义的XML资源文件创建的。 XML文件包含一个“选择器”元素,其中包含许多“项目”元素。例如:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true"
           android:color="@color/sample_focused" />
   <item android:state_pressed="true"
           android:state_enabled="false"
           android:color="@color/sample_disabled_pressed" />
   <item android:state_enabled="false"
           android:color="@color/sample_disabled_not_pressed" />
   <item android:color="@color/sample_default" />
 </selector>