最近發現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;
}
}
到了這裏就完成了,怎麼樣是不是很簡單。至於更復雜的用法希望大家踊躍留言。下面是效果圖,供大家參考。
寫博客不易,如果你覺得有用,請幫忙頂一下以表示支持。感謝!!!