Android簡單實現列表菜單--PopupMenu的簡單使用。

最近發現PopupMenu用來做菜單非常的方便,而且使用也非常的簡單,下面我們就來看下如何使用的吧。

首先在佈局文件中創建兩個Button。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.chengshi.popupwindowdemo.MainActivity">

    <Button
        android:id="@+id/btn_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="彈出選擇框"/>

    <Button
        android:id="@+id/btn_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="彈出PopupMenu"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"/>

</RelativeLayout>

然後找到兩個Button設置點擊事件。並創建出兩個PopupMenu。

View v1 = findViewById(R.id.btn_popup);
if (v1 != null) {
    v1.setOnClickListener(this);
    mMenu = new PopupMenu(this, v1);
    mMenu.getMenuInflater().inflate(R.menu.menu_popupmenu, mMenu.getMenu());
    mMenu.setOnMenuItemClickListener(this);
}

View v2 = findViewById(R.id.btn_check);
if (v2 != null) {
    v2.setOnClickListener(this);
    mCheckMenu = new PopupMenu(this, v2);
    mCheckMenu.getMenuInflater().inflate(R.menu.menu_checkmenu, mCheckMenu.getMenu());
    mCheckMenu.setOnMenuItemClickListener(this);
}

上面我是創建了兩個不同的菜單,因爲每次點擊按鈕後都創建感覺不大好,所以我就直接在onCreate方法中創建了。而且這裏我不需要Button的特有屬性就不強轉了。

R.menu.menu_checkmenu 是一個單選菜單組。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/check1"
            android:title="選擇1"/>
        <item
            android:id="@+id/check2"
            android:title="選擇2"/>
        <item
            android:id="@+id/check3"
            android:title="選擇3"/>
    </group>
</menu>

android:checkableBehavior的值有三個:
1. single:單選
2. all:多選。(不過多選貌似不好用。因爲選擇完一個以後菜單就自動消失了,目前沒有找到解決的辦法。如果有哪位大神知道請留言,萬分感激。)
3. none:沒有選擇框。(相當於普通菜單。)

R.menu.menu_popupmenu 是一個普通的菜單。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/action_unKnow"
        android:title="未知"/>

    <item
        android:id="@+id/action_setting"
        android:title="設置"/>

    <item
        android:id="@+id/action_startActivity"
        android:title="啓動Activity"/>
</menu>

現在來看下代碼都是做了什麼事情吧。

mCheckMenu = new PopupMenu(this, v2);

這句代碼是創建一個PopupMenu對象。第一個參數是一個Context上下文,第二個參數就是要綁定的對象,就是說你要在哪個View上彈出菜單。

mCheckMenu.getMenuInflater().inflate(R.menu.menu_checkmenu, mCheckMenu.getMenu());

這句代碼首先是獲取到PopupMenu的填充器,然後將我們寫好的menu文件填充進來,inflate()方法有兩個參數,第一個是我們的menu菜單文件,第二個參數是我們要將菜單填充到哪裏。

mCheckMenu.setOnMenuItemClickListener(this);

這句代碼是給PopupMenu設置菜單條目點擊監聽。下面是點擊監聽中的代碼。

@Override
public boolean onMenuItemClick(MenuItem item) {
    if (item.getItemId() == R.id.action_unKnow) {  //根據ItemId進行判斷。
        Toast.makeText(this, "您點擊了“未知“按鈕", Toast.LENGTH_SHORT).show();
        return true;
    } else if (TextUtils.equals(item.getTitle(), "設置")) { //根據標題進行判斷。
        Toast.makeText(this, "您點擊了“設置”按鈕", Toast.LENGTH_SHORT).show();
        return true;
    } else if (item.getItemId() == R.id.action_startActivity) {
        startActivity(new Intent(this, NewActivity.class));
        return true;
    } else if (item.getItemId() == R.id.check1
            || item.getItemId() == R.id.check2
            || item.getItemId() == R.id.check3) {
        item.setChecked(!item.isChecked());
        Toast.makeText(this, "您點擊了“" + item.getTitle() + "”按鈕", Toast.LENGTH_SHORT).show();
        return true;
    }
    return false;
}

這裏我用if語句是爲了告訴大家getItemId()和item.getTitle()分別返回的結果,getItemId()返回的是menu資源文件中的資源ID,item.getTitle()返回的是menu資源文件中的title屬性值。其他的就不解釋了,都是很簡單的代碼。

到了這裏還沒有真正的完事兒。還需要在點擊Button後將PopupMenu show出來。下面是按鈕的onClick監聽中的代碼。

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn_check:
            mCheckMenu.show();
            break;

        case R.id.btn_popup:
            mMenu.show();
            break;
    }
}

到了這裏就完成了,怎麼樣是不是很簡單。至於更復雜的用法希望大家踊躍留言。下面是效果圖,供大家參考。


寫博客不易,如果你覺得有用,請幫忙頂一下以表示支持。感謝!!!

PupupMenu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章