在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第十九章-Android菜單之選項菜單
第十八章-ViewPager+FragmentStatePagerAdapter實(shí)現(xiàn)仿微信Tab
第十五章-GridView實(shí)現(xiàn)動態(tài)添加和刪除子項
第九章-進(jìn)度條ProgressBar
第十二章-經(jīng)典的ListView
第十四章-GridView控件
第八章-時間相關(guān)控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開關(guān)按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動態(tài)添加、刪除及點(diǎn)擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴(kuò)展(多選、全選、反選)
第四章-玩轉(zhuǎn)單選和多選按鈕
第十章-可以拖動的ProgressBar-SeekBar
第十九章-Android菜單之選項菜單

第十九章-Android菜單之選項菜單

Android菜單包括選項菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu)三種,本節(jié)將對這選項菜單的用法進(jìn)行學(xué)習(xí)。

選項菜單共有五個常用的方法,下面對這些方法進(jìn)行一一介紹:

  • public boolean onCreateOptionsMenu(Menu menu):使用此方法創(chuàng)建選項菜單,通常有兩種方式,一種稱為靜態(tài)方式(xml布局文件創(chuàng)建菜單),另一種通過Menu的add方法動態(tài)添加選項菜單;
  • public boolean onOptionsItemSelected(MenuItem item):選中菜單項被選擇后觸發(fā),可以根據(jù)item對象的getItemId方法判斷點(diǎn)擊了哪一個菜單;
  • public void onOptionsMenuClosed(Menu menu):菜單關(guān)閉時觸發(fā);
  • public boolean onPrepareOptionsMenu(Menu menu):選項菜單顯示之前觸發(fā);
  • public boolean onMenuOpened(int featureId, Menu menu):選項菜單打開時觸發(fā)。

下面通過靜態(tài)和動態(tài)的方式構(gòu)建選項菜單

1.靜態(tài)方式:通過定義xml文件的形式確定子項菜單 菜單文件(menu.xml)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/meun1"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="3"
        android:title="菜單一" />
    <item
        android:id="@+id/menu2"
        android:orderInCategory="2"
        android:title="菜單二" />
    <item
        android:id="@+id/menu3"
        android:enabled="false"
        android:orderInCategory="4"
        android:title="不可用菜單" />
</menu>

這里定義了三個item,每個item都有特定的屬性,下面總結(jié)一下常用屬性含義:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-1.png" alt="這里寫圖片描述" />

MainActivity代碼(MainActivity.java)

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }
   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.meun1:
                Toast.makeText(MainActivity.this, "菜單一被選擇了", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu2:
                Toast.makeText(MainActivity.this, "菜單二被選擇了", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu3:
                Toast.makeText(MainActivity.this, "菜單三被選擇了", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        Toast.makeText(MainActivity.this, "選項菜單開啟", Toast.LENGTH_SHORT).show();
        return super.onMenuOpened(featureId, menu);
    }
    @Override
    public void onOptionsMenuClosed(Menu menu) {
        super.onOptionsMenuClosed(menu);
        Toast.makeText(MainActivity.this, "選項菜單關(guān)閉", Toast.LENGTH_SHORT).show();
    }
}

這里使用了getMenuInflater().inflate(R.menu.menu,menu);方式導(dǎo)入菜單文件,inflate方法需要傳入兩個參數(shù),第一個是菜單文件,第二個是Menu對象。同時也調(diào)用了onOptionsItemSelected方法監(jiān)聽菜單項的選擇,調(diào)用了onMenuOpened和onOptionMenuClosed方法監(jiān)聽菜單選項的打開和關(guān)閉。

運(yùn)行項目實(shí)例:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-2.png" alt="這里寫圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-3.png" alt="這里寫圖片描述" />

我們在menu文件中設(shè)置了第三個菜單的enable為false,所以它不可點(diǎn)擊。

2.動態(tài)方式

MainActivity(MainActivity.java)

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//創(chuàng)建選項菜單
        menu.add(menu.NONE, 1, 1, "菜單1");
        menu.add(menu.NONE, 2, 2, "菜單2");
        menu.add(menu.NONE, 3, 3, "菜單3");
        menu.add(menu.NONE, 4, 4, "菜單4");
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {//菜單選擇監(jiān)聽
        switch (item.getItemId()) {
            case 1:
                Toast.makeText(MainActivity.this, "菜單一被選擇了", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(MainActivity.this, "菜單二被選擇了", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(MainActivity.this, "菜單三被選擇了", Toast.LENGTH_SHORT).show();
                break;
            case 4:
                Toast.makeText(MainActivity.this, "菜單四被選擇了", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {//菜單打開事件監(jiān)聽
        Toast.makeText(MainActivity.this, "選項菜單開啟", Toast.LENGTH_SHORT).show();
        return super.onMenuOpened(featureId, menu);
    }
    @Override
    public void onOptionsMenuClosed(Menu menu) {//菜單關(guān)閉事件監(jiān)聽
        super.onOptionsMenuClosed(menu);
        Toast.makeText(MainActivity.this, "選項菜單關(guān)閉", Toast.LENGTH_SHORT).show();
    }
}

這里采用了動態(tài)添加的方式,調(diào)用了Menu類的add方法,如下: public MenuItem add(int groupId, int itemId, int order, CharSequence title); add方法中需要傳入四個參數(shù):

  • groupId:組別,不分組可以寫Menu.NONE
  • itemId:子菜單項Id,作為子菜單的唯一標(biāo)識
  • order:菜單顯示順序
  • title:菜單文本顯示

菜單選擇事件監(jiān)聽通過傳入的MenuItem對象,并調(diào)用其getItemId來判斷哪一個子菜單被選擇了。

運(yùn)行項目實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-4.png" alt="這里寫圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-5.png" alt="這里寫圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-6.png" alt="這里寫圖片描述" />

點(diǎn)擊選項菜單按鈕時,選項菜單彈出,選項菜單開啟事件觸發(fā),選擇菜單二,選擇事件觸發(fā),選擇完成后,菜單自動關(guān)閉,這時選項菜單關(guān)閉事件觸發(fā)。

細(xì)心的讀者會發(fā)現(xiàn),上面的實(shí)例中設(shè)置了子菜單的圖標(biāo),但是并沒有顯示,原因是在Android2.3以上的版本的源碼進(jìn)行了改變,若要想顯示圖標(biāo)可以通過修改源碼實(shí)現(xiàn),這一方法可以參考博文:http://blog.csdn.net/stevenhu_223/article/details/9705173。我們這里給出一個自定義彈出框的形式來實(shí)現(xiàn)更美觀的菜單選項。

彈出框布局文件(view.xml) 彈出框布局采用GridView控件進(jìn)行布局,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <GridView
        android:id="@+id/gridview"
        android:layout_width="300dp"
        android:layout_height="150dp"
        android:gravity="center"
        android:numColumns="3" />
</LinearLayout>

GridView子布局文件(item.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout_Item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">
    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_centerHorizontal="true"></ImageView>
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv_icon"
        android:layout_centerHorizontal="true"
        android:text="選項"></TextView>
</RelativeLayout>

MainActivity代碼(MainActivity.java)

public class MainActivity extends Activity {
    private AlertDialog alertDialog;
    private GridView gridView;
    private View view;
    private int[] icons = {R.drawable.exit, R.drawable.fold, R.drawable.set, R.drawable.newpic, R.drawable.more};
    private String[] titles = {"退出", "文件", "設(shè)置", "新建", "更多"};
    private SimpleAdapter simpleAdapter;
    private List<Map<String, Object>> datas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = LayoutInflater.from(this).inflate(R.layout.view, null);//獲得彈出框布局文件對象
        initDatas();//初始化數(shù)據(jù)集
        //初始化SimpleAdapter
        simpleAdapter = new SimpleAdapter(this, datas, R.layout.item, new String[]{"icon", "title"}, new int[]{R.id.iv_icon, R.id.tv_title});
        alertDialog=new AlertDialog.Builder(this).create();//創(chuàng)建彈出框
        alertDialog.setView(view);//設(shè)置彈出框布局
        gridView=(GridView)view.findViewById(R.id.gridview);
        gridView.setAdapter(simpleAdapter);//設(shè)置適配器
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//GridView子項單擊事件監(jiān)聽
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this,"您點(diǎn)擊了"+titles[position]+"按鈕",Toast.LENGTH_SHORT).show();
                alertDialog.dismiss();
            }
        });
    }
    private void initDatas() {
        datas = new ArrayList<>();
        for (int i = 0; i < titles.length; i++) {
            Map map = new HashMap();
            map.put("icon", icons[i]);
            map.put("title", titles[i]);
            datas.add(map);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {//覆寫了onKeyDown方法
        if(keyCode==KeyEvent.KEYCODE_MENU){//當(dāng)按下菜單鍵時
            if (alertDialog == null) {
                alertDialog = new AlertDialog.Builder(this).setView(view).show();
            } else
                alertDialog.show();
        }
        return super.onKeyDown(keyCode, event);
    }
}

這里覆寫了onKeyDown方法,當(dāng)菜單鍵按下時,彈出對話框,對話框布局采用了GridView控件,設(shè)置了GridView子項單擊事件監(jiān)聽,處理對于邏輯。SimpleAdapter適配器類初始化時要傳入五個參數(shù),不熟悉的讀者可以參考前面的GridView章節(jié)。

運(yùn)行實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-7.png" alt="這里寫圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/19-8.png" alt="這里寫圖片描述" />

點(diǎn)擊設(shè)置按鈕,彈出對話菜單選擇框,選擇對應(yīng)的子菜單對應(yīng)不同的邏輯操作。