Android進階(二十八)操作功能表ContextMenu使用案例

來源:互聯網
上載者:User

標籤:

操作功能表ContextMenu使用案例 前言

      回顧之前的應用程式,發現之前建立的選項菜單無法顯示了。按照正常邏輯來說,左圖中在“商品資訊”一欄中應該存在選項菜單,使用者可進行分享等操作,但是現在此操作莫名其妙的消失了。寫了個測試Demo,如中圖所示,一切按照邏輯顯示正常。怪就怪在項目中無法顯示,起初設想是因為Android系統版本太高問題,但是在別的手機上測試之後發現問題依舊存在。難道是因為頂部Tab標題列遮擋住了選項菜單的顯示?繼續測試,通過在別的沒有Tab標題列的頁面測試選項菜單,發現依舊無法顯示,如右圖所示。這樣問題就變得更加棘手了。難道是因為項目整體設定問題,這方面的原因很大,不過由於問題根源不明確,所以修改也存在一定的難度。

                              

轉變思路

     既然通過選項菜單無法完成操作,通過閱讀書籍得知還存在另外兩種形式的菜單:子功能表(submenu)、捷徑功能表(context menu),嘗試建立context menu解決問題。

     捷徑功能表類似於電腦程式中的“右鍵菜單”,當使用者點擊介面上某個元素超過2秒後,將啟動註冊到該介面元素的捷徑功能表。捷徑功能表同樣採用浮動的顯示方式,雖然捷徑功能表的顯示方式與子功能表相同,但兩種菜單的啟動方式卻截然不同。

     捷徑功能表的使用方法與選項菜單極為相似,只是重載的函數不同而已。捷徑功能表需要重載onCreatContextMenu()函數初始化功能表項目,包括添加捷徑功能表所顯示的標題、表徵圖和菜單子項等內容。

     有關選項菜單的建立代碼,詳見博文《Android進階(二十六)MenuInflater實現菜單添加》,在此不再展示。

源碼

// 添加捷徑功能表// 1.重寫onCreateContextMenu(Menu menu)的方法,在該方法裡調用Menu對象的方法來添加功能表項目或子功能表@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {MenuInflater inflater = new MenuInflater(this);// 裝填R.menu.production_info_activity_menu對應的菜單,並添加到menu中inflater.inflate(R.menu.production_info_activity_menu, menu);menu.setHeaderTitle("QuickMark");super.onCreateContextMenu(menu, v, menuInfo);} // 2.若希望應用程式能夠相應功能表項目的單擊事件,重寫Activity的onContextItemSelected(MenuItem item)方法即可@Overridepublic boolean onContextItemSelected(MenuItem item) {// 得到當前選中的MenuItem的ID,int item_id = item.getItemId();// 判斷單擊的是是哪個功能表項目,並有針對性的做出響應switch (item_id) {case R.id.PIA_menuitem_fenxiang: {Intent intent = new Intent(Intent.ACTION_SEND);//設定分享類型//intent.setType("image/*");intent.setType("text/plain");intent.putExtra(Intent.EXTRA_SUBJECT, "Share");//好戲在這裡!intent.putExtra(Intent.EXTRA_TEXT,"#我正在使用“QuickMark”購物評價分享軟體(分享自華強APP)#" + product.toString());intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(Intent.createChooser(intent, getTitle()));};break;case R.id.PIA_menuitem_shuaxin:{}}return true;}

     將捷徑功能表註冊到介面中的某一控制項代碼如下:

     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.production_info_activity);         // 將捷徑功能表註冊到商品二維碼圖片上        LinearLayout layout = (LinearLayout) findViewById(R.id.PIA_linearLayout);        registerForContextMenu(layout);        .....}

      其中,R.id.PIA_linearLayout為整體線性布局的ID。

      效果如所示:

             

      至此,捷徑功能表建立完畢。

注 onCreateContextMenu與onCreateOptionsMenu的區別

      onCreateOptionsMenu函數僅在第一次使用菜單時被調用一次;

      onCreateContextMenu函數在每次啟動都將會被調用一次。

參考文獻

      1.《Android應用程式開發 第二版》

      2.http://www.2cto.com/kf/201309/247051.html

美文美圖

 


Android進階(二十八)操作功能表ContextMenu使用案例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.