[android] 如何以編程方式創建ColorStateList?


2 Answers

第一維是一組狀態集,第二維是狀態集本身。 colors數組列出了每個匹配狀態集的顏色,因此colors數組的長度必須與states數組的第一維相匹配(或者當狀態為“used”時它會崩潰)。 這里和例子:

ColorStateList myColorStateList = new ColorStateList(
                        new int[][]{
                                new int[]{android.R.attr.state_pressed}, //1
                                new int[]{android.R.attr.state_focused}, //2
                                new int[]{android.R.attr.state_focused, android.R.attr.state_pressed} //3
                        },
                        new int[] {
                            Color.RED, //1
                            Color.GREEN, //2
                            Color.BLUE //3
                        }
                    );

希望這可以幫助。

編輯示例:一個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="@color/white"/>
    <item android:color="@color/black"/>
</selector>

看起來像這樣

ColorStateList myColorStateList = new ColorStateList(
        new int[][]{
                new int[]{android.R.attr.state_pressed},
                new int[]{}
        },
        new int[] {
                context.getResources().getColor(R.color.white),
                context.getResources().getColor(R.color.black)
        }
);
Question

我試圖創建一個ColorStateList編程方式使用此:

ColorStateList stateList = new ColorStateList(states, colors); 

但我不確定這兩個參數是什麼。

根據文件:

public ColorStateList (int[][] states, int[] colors) 

在API級別1中添加

創建一個ColorStateList,它返回從狀態到顏色的指定映射。

有人可以解釋我如何創建這個?

二維數組對於狀態的含義是什麼?




如果您使用Colors.xml的資源

int[] colors = new int[] {
                getResources().getColor(R.color.ColorVerificaLunes),
                getResources().getColor(R.color.ColorVerificaMartes),
                getResources().getColor(R.color.ColorVerificaMiercoles),
                getResources().getColor(R.color.ColorVerificaJueves),
                getResources().getColor(R.color.ColorVerificaViernes)

        };

ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{colors[0]}); 

    example.setBackgroundTintList(csl);



有時候這樣就足夠了:

int colorInt = getResources().getColor(R.color.ColorVerificaLunes);
ColorStateList csl = ColorStateList.valueOf(colorInt);



Related