Android ContextMenu的使用

來源:互聯網
上載者:User

標籤:android   操作功能表   contextmenu   

ContextMenu介紹:

如果一個View註冊了操作功能表,那麼當長按該View時便會彈出一個浮動菜單,來供選擇下一步操作。

實現這個功能需要調用setOnCreateContextMenuListener來註冊一個監聽器,那麼它和註冊長按監聽器setOnLongClickListener有什麼區別呢?下面會在代碼中加以測試,通過添加列印發現,使用者對某個View長按之後,首先觸發的是onLongClick函數,執行onLongClick操作,然後根據onLongClick的返回值判斷是不是執行OnCreateContextMenuListener函數;如果onLongClick返回false,則會繼續執行OnCreateContextMenuListener函數,如果返回true,忽略OnCreateContextMenuListener函數。

代碼如下:

public class MainActivity extends ActionBarActivity {ImageView mImageView ;MyContextMenuClickListener mContextListener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);mImageView = (ImageView) findViewById(R.id.image);mContextListener = new MyContextMenuClickListener();mImageView.setOnCreateContextMenuListener(mContextListener);//testmImageView.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View arg0) {// TODO Auto-generated method stubLog.d("Test", "onLongClick");return false;}});}private class MyContextMenuClickListener implements OnCreateContextMenuListener , OnMenuItemClickListener{@Overridepublic boolean onMenuItemClick(MenuItem item) {// TODO Auto-generated method stubswitch(item.getItemId()){case R.id.open:Log.d("Test", "click open");break;case R.id.delete:Log.d("Test", "click delete");break;case R.id.remove:Log.d("Test", "click remove");break;default:break;}return true;}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// TODO Auto-generated method stubLog.d("Test", "onCreateContextMenu");MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.context_menu, menu);LayoutInflater layoutInflater = getLayoutInflater();View view = (View) layoutInflater.inflate(R.layout.menu_header, null);menu.setHeaderView(view);MenuItem open = menu.findItem(R.id.open);open.setOnMenuItemClickListener(mContextListener);MenuItem delete = menu.findItem(R.id.delete);delete.setOnMenuItemClickListener(mContextListener);MenuItem remove = menu.findItem(R.id.remove);remove.setOnMenuItemClickListener(mContextListener);}}}

context_menu.xml

<?xml version="1.0" encoding="UTF-8"?>    <menu xmlns:android="http://schemas.android.com/apk/res/android">    <group android:id="@+id/CONTEXT_MENU">    <item android:id="@+id/delete"        android:title="delete"/>        <item android:id="@+id/open"        android:title="open"/>           <item android:id="@+id/remove"        android:title="remove"/>       </group>    </menu>

menu_header.xml

<?xml version="1.0" encoding="UTF-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_height="wrap_content"    android:layout_width="wrap_content"    >    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="This is a Test"        />    </LinearLayout>


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.