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

Android ListView 中 CheckBox 紅色三點菜單按鈕的來源與自定義方法

     編輯:程式設計綜合問答

問題現象

ListView 項目中包含 CheckBox,右側出現紅色三點菜單圖標(溢出菜單),用戶詢問該控件來源及自定義方法。

根因解析

該三點圖標不是 ListView 或 CheckBox 的原生組件,而是 Activity 的 Options Menu(選項菜單)溢出圖標:

  • 有物理 Menu 鍵的設備:按 Menu 鍵彈出底部菜單,不顯示三點
  • 無物理 Menu 鍵的設備:ActionBar/Toolbar 右側顯示三點溢出按鈕
  • 點擊三點展開 onCreateOptionsMenu 定義的菜單項

菜單實現代碼

// Activity 中重寫
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // 處理設置
            return true;
        case R.id.action_delete:
            // 處理刪除
            return true;
    }
    return super.onOptionsItemSelected(item);
}

菜單資源文件 (res/menu/main_menu.xml)

<menu xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings"
        android:title="@string/settings"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_delete"
        android:title="@string/delete"
        app:showAsAction="never" />
</menu>

自定義三點菜單樣式

1. 修改圖標

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="actionOverflowButtonStyle">@style/OverflowButtonStyle</item>
</style>

<style name="OverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/custom_overflow_icon</item>
</style>

2. 使用 Toolbar 完全控制

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:overflowIcon="@drawable/custom_overflow" />

// Activity 中
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

關鍵區別總結

特性Options Menu (三點)Context Menu (長按)PopupMenu (錨點)
觸發方式點擊三點/Menu鍵長按 View代碼調用 show()
定義位置Activity/FragmentregisterForContextMenu任意位置
適用場景全局操作項目操作按鈕下拉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved