關於設定選擇條顏色多個ListView之間切換問題解決方案

明月春秋發表於2017-11-12

近期在專案中需要給ListView設定自定義選擇條顏色,一開始是用ListView的listSelector屬性,但出現了兩個問題。
1.一開始每個ListView上就出現了選擇條顏色
2.有多個ListView,但切換選擇時,上一個ListView的item位置上的選擇條顏色並沒有消失。
由於是通過按鍵來控制ListView上item的焦點與選擇切換,所以在此給出自己的解決方案,使自定義的選擇條顏色能跟隨按鍵的選擇在多個ListView之間自由切換。
一、未解決前

上圖:


二、通過xml設定的listSelector屬性效果

上圖:


三、解決方案

由於專案是通過按鍵來控制ListView的選擇,所以這裡的解決方案是針對按鍵的
1.建立一個View.OnfocusChangeListener()

private View.OnFocusChangeListener listener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus){
            v.requestFocus();
            //這裡,使用者就可以隨意設定為自己想要的顏色或資源
            ((AbsListView)v).setSelector(android.R.color.holo_blue_bright);
        }
        else {
            //當沒有被焦點選中時,再將其設定會透明色,不會覆蓋底層的背景
            ((AbsListView)v).setSelector(android.R.color.transparent);
        }
    }
};複製程式碼

2.給ListView設定焦點監聽事件。

private ListView lvSelectOne, lvSelectTwo;
lvSelectOne.setOnFocusChangeListener(listener);
lvSelectTwo.setOnFocusChangeListener(listener);複製程式碼

3.解決效果,上圖:

四、總結

到了這裡,自定義選擇條顏色並在多個ListView之間切換問題就解決了,這裡針對的是通過按鍵控制ListView的選擇情況。如果對本文有什麼意見和問題歡迎指正,謝謝觀看。

相關文章