android開發之使用操作功能表

來源:互聯網
上載者:User

標籤:android   menu   contextmenu   

android中的操作功能表類似於PC上的滑鼠右鍵單擊,不同的是android上沒有滑鼠這一概念,更談不上按右鍵,在android中,一般是長按某個View,調出操作功能表。與OptionsMenu不同的是,ContextMenu是一個針對View的菜單,它綁定在某一個View上,而OptionsMenu是屬於一個Activity的。


現在大部分瀏覽器都有長按複製的功能,如:


這種效果的實現是使用PopupWindow來實現的(關於PopupWindow的使用可以參見我的另一篇文章popupWindow使用詳解
),雖然它和我們即將要說的ContextMenu很像。


好了,說了這麼多,我們該說說怎麼實現操作功能表了。

實現操作功能表一共三個步驟:

1.重寫Activity或者Fragment中的onCreateContextMenu方法:

@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);menu.setHeaderTitle("你想幹啥?");menu.setHeaderIcon(R.drawable.a4c);menu.add(0, 0, Menu.NONE, "複製");menu.add(0, 1, Menu.NONE, "剪貼");menu.add(0, 2, Menu.NONE, "重新命名");menu.add(1, 3, Menu.NONE, "去新的Activity");}


2.重寫Activity或者Fragment中的onContextItemSelected方法,實現菜單事件監聽

@Overridepublic boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case 0:tv.setText(item.getTitle().toString());break;case 1:tv.setText(item.getTitle().toString());break;case 2:tv.setText(item.getTitle().toString());break;case 3:tv.setText(item.getTitle().toString());startActivity(new Intent(this, SecondActivity.class));break;default:return super.onContextItemSelected(item);}return true;}

3.給View註冊操作功能表

tv = (TextView) this.findViewById(R.id.tv);this.registerForContextMenu(tv);

三個步驟實現了給一個TextView註冊了操作功能表事件,有時候我們會遇到另外情況,比如說要給ListView中的每一項都添加操作功能表,而且當我們長按ListView該項的時候,我們還希望能夠知道我們點擊的是哪一個item,這個該怎麼實現呢?AdapterContextMenuInfo專為解決這個問題而生,看看先下面的代碼:

public class SecondActivity extends Activity {private ListView lv;private String[] menuStrs;private ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);lv = (ListView) this.findViewById(R.id.lv);initListView();this.registerForContextMenu(lv);}private void initListView() {menuStrs = new String[] { "慶曆四年春", "滕子京謫守巴陵郡", "越明年", "政通人和" };adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menuStrs);lv.setAdapter(adapter);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);menu.setHeaderTitle("你想幹啥?");menu.setHeaderIcon(R.drawable.a4c);menu.add(0, 0, Menu.NONE, "嶽");menu.add(0, 1, Menu.NONE, "陽");menu.add(0, 2, Menu.NONE, "樓");menu.add(1, 3, Menu.NONE, "記");}@Overridepublic boolean onContextItemSelected(MenuItem item) {AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();switch (item.getItemId()) {case 0:menuStrs[menuInfo.position] += "嶽";break;case 1:menuStrs[menuInfo.position] += "陽";break;case 2:menuStrs[menuInfo.position] += "樓";break;case 3:menuStrs[menuInfo.position] += "記";break;default:return super.onContextItemSelected(item);}adapter.notifyDataSetChanged();return true;}}

前面的東西都很簡單,我就不多說了,通過AdapterContextMenuInfo的執行個體我們可以拿到我們所點擊item的position,id等,我們這裡實現的一個效果就是點擊操作功能表之後在每個item View後面添加一個字。


實現的效果如所示:



Demo下載https://github.com/lenve/contextMenu



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。

android開發之使用操作功能表

聯繫我們

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