Android - 以编程方式获取listview的高亮颜色(向后兼容)

时间:2013-11-25 10:46:12

标签: android listview colors

当用户按下listview项时,它会突出显示,并在放开时返回原始颜色。 我想以编程方式查询这些是什么颜色。

在超过14的Api版本上似乎我可以使用 (i)Theme.resolveAttribute(int resid,TypedValue outValue,boolean resolveRefs)或 (ii)Theme.obtainStyledAttributes(int [] attrs)

    //-- (i) ---------------------------------------------
    int getAttrVal(int attr)
    {
        TypedValue Val = new TypedValue();
        getContext().getTheme().resolveAttribute(attr, Val, true);
        return Val.data;
    }


    int colBgd = getAttrVal(android.R.attr.colorBackground);
    int colAh = getAttrVal(android.R.attr.colorActivatedHighlight);
     int colPh = getAttrVal(android.R.attr.colorPressedHighlight);  // not sure if this or prev is what im looking for!?

    // (ii) ---------------------------------------------        
     TypedArray Arr = getContext().getTheme().obtainStyledAttributes(
                      new int[] {android.R.attr.colorPressedHighlight});
      int colPh2 = arrTst.getColor(0, 0xFF00FF);
    //--------------------------------------------------

在较旧的Api版本上,此后无法使用 android.R.attr.colorActivatedHighlight / colorPressedHighlight 还没有。

(1)是否有以编程方式在api 8上获取这些颜色? (2)我对主题

中的其他一些功能感到有点困惑

例如(iii)Theme.obtainStyledAttributes(int resid,int [] attrs)

    // ---------------------------------------------                     
     TypedArray Arr2 = getContext().getTheme().obtainStyledAttributes(
               android.R.attr.colorBackground, new int[] {android.R.attr.colorPressedHighlight});
                int colTst2 = arrTst.getColor(0, 0xFF00FF);

    Here it seems not to matter what value I use for resid. What's the point of this parameter?     

(3)R.attr和R.styleable有什么区别? R.attr应该是R.styleable的替代品(并且基本上有相应的条目),或者他们的目的只是部分重叠。

1 个答案:

答案 0 :(得分:0)

您应该使用以下项目声明一个选择器:

<item android:drawable="@color/selected" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@color/selected" android:state_focused="false" android:state_pressed="true"/>
<item android:drawable="@color/selected" android:state_focused="true"/>
<item android:drawable="@color/normal" android:state_focused="false" android:state_pressed="false"/>

并将其设置为listRow的背景