ListView 項目中包含 CheckBox,右側出現紅色三點菜單圖標(溢出菜單),用戶詢問該控件來源及自定義方法。
該三點圖標不是 ListView 或 CheckBox 的原生組件,而是 Activity 的 Options Menu(選項菜單)溢出圖標:
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);
}
<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>
<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>
<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/Fragment | registerForContextMenu | 任意位置 |
| 適用場景 | 全局操作 | 項目操作 | 按鈕下拉 |