首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android GridView Item 按下背景色變化自定義實現

     編輯:程式設計綜合問答

需求場景

修改 GridView Item 按下時的背景顏色,替換系統默認選中效果。

核心思路:Adapter 狀態標記 + 選擇器

在 Adapter 中維护選中位置,getView 根據位置設置背景,點擊事件更新位置並刷新。

完整實現步驟

1. Adapter 中添加選中狀態管理

public class MyGridAdapter extends BaseAdapter {
    private int selectedPosition = -1; // 記錄選中位置
    
    public void setSelection(int position) {
        selectedPosition = position;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = LayoutInflater.from(context).inflate(R.layout.grid_item, parent, false);
        }
        
        // 關鍵:根據選中狀態設置背景
        if (position == selectedPosition) {
            view.setBackgroundResource(R.drawable.grid_item_selected);
        } else {
            view.setBackgroundResource(R.drawable.grid_item_normal);
        }
        
        // 綁定數據...
        return view;
    }
}

2. 定義狀態選擇器 Drawable (res/drawable/grid_item_selector.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/colorPressed" />
    <item android:state_selected="true" android:drawable="@color/colorSelected" />
    <item android:drawable="@color/colorNormal" />
</selector>

佈局中直接應用:android:background="@drawable/grid_item_selector"

3. GridView 點擊事件處理

gridView.setOnItemClickListener((parent, view, position, id) -> {
    adapter.setSelection(position);
    adapter.notifyDataSetChanged(); // 刷新背景
    
    // 執行業務邏輯...
});

進階:多選模式

// Adapter 中使用 Set 記錄多選位置
private Set selectedPositions = new HashSet<>();

public void toggleSelection(int position) {
    if (selectedPositions.contains(position)) {
        selectedPositions.remove(position);
    } else {
        selectedPositions.add(position);
    }
    notifyDataSetChanged();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // ...
    boolean isSelected = selectedPositions.contains(position);
    view.setBackgroundResource(isSelected ? R.drawable.selected : R.drawable.normal);
    // ...
}

效果圖

GridView Item 按下背景變化效果

總結

通過 Adapter 維護選中狀態並在 getView 中動態設置背景,配合 Selector Drawable,可完全自定義 GridView Item 的按下、選中、正常狀態樣式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved