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

Android ActionBar Action 按鈕長按/滑動監聽:原生不支援,需自訂 View 或放棄

     編輯:程式設計綜合問答

現狀

`MenuItem` / `ActionView` **只提供 `setOnMenuItemClickListener` (單擊)**,**無長按、觸摸、滑動事件回調**。`ActionBar` 內部實現不暴露 `OnTouchListener` 給開發者。

可行方案

1. 自訂 Action View (推薦)


// menu.xml
<item android:id="@+id/action_custom"
      android:actionLayout="@layout/custom_action_button"
      app:showAsAction="always" />


<ImageButton xmlns:android="..."
    android:id="@+id/btn_custom"
    android:layout_width="?attr/actionButtonSize"
    android:layout_height="?attr/actionButtonSize"
    android:background="?attr/actionBarItemBackground"
    android:src="@drawable/ic_icon" />

// Activity
View customView = findViewById(R.id.btn_custom);
customView.setOnLongClickListener(v -> { /* 長按邏輯 */ return true; });
customView.setOnTouchListener((v, event) -> { /* 滑動/手勢 */ return false; });

**優點**:完全掌控觸摸事件、長按、手勢。
**缺點**:需自行適配 ActionBar 高度、邊距、Ripple 效果、主題色。

2. Toolbar + 自訂 MenuItem 布局 (現代寫法)

同原理,`Toolbar` 取代 `ActionBar`,`menu.xml` 用 `actionLayout` 指向自訂 `View`,同樣可掛 `OnLongClickListener`/`OnTouchListener`。

3. 放棄長按/滑動,改用「雙擊」或「選單項次級動作」

  • 單擊執行主要動作。
  • 長按無法實現 → 在溢出選單/子選單放次級動作(如「編輯」、「刪除」)。
  • 或用「雙擊」模擬次級觸發(需自行計時判斷)。

總結

**原生 ActionBar/MenuItem 不支援長按/滑動監聽**。要實現,**必須用 `actionLayout` 自訂 View (ImageButton 等) 並掛原生觸摸監聽器**;或改用 Toolbar 同樣做法。若非核心需求,建議用子選單替代,避免自訂 View 適配成本。

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