Android 實現點擊出現選擇框,或者長按顯示選擇介面,PopupMenu的簡單使用。
阿新 • • 發佈:2019-01-10
這篇文章是我學習過程中遇到的一個比較簡單的,但是卻經常用到的知識點,例如ListView Item長按的選擇功能,或者是點選一個按鈕彈出一個小型的功能選擇介面。
其實呢,這個是通過一個PopupMenu來實現,來現在我們先看看程式碼,首先我們需要在 res目錄下的menu目錄下建立一個xml檔案,如果res目錄下沒有menu目錄,則新建一個目錄為menu則好,然後建立一個xml檔案。
main_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/add_item"
android:title="Add"
></item>
<item
android:id="@+id/delete_item"
android:title="Delete"
></item>
</menu>
這裡面的Item就是有多少個功能選項和它的名字。
然後我們看一下activity_main.xml
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft ="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.learnmenu.MainActivity">
<Button
android:id="@+id/btn_popMenu"
android:textAllCaps="false"
android:text="Popmenu"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
這裡面我們就放置了一個button用於點選後彈出功能選項選單。
然後就是最主要的程式碼來實現主要功能了。
MainActivity
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn_popMenu);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopMenu(view);
}
});
}
public void showPopMenu(View view){
PopupMenu menu = new PopupMenu(this,view);
menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(MainActivity.this, "Add selected", Toast.LENGTH_SHORT).show();
break;
case R.id.delete_item:
Toast.makeText(MainActivity.this, "Delete Selected", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
menu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
Toast.makeText(MainActivity.this, "關閉了", Toast.LENGTH_SHORT).show();
}
});
menu.show();
}
}
我們來看看核心程式碼部分。
showpopMenu這個函式
public void showPopMenu(View view){
PopupMenu menu = new PopupMenu(this,view);
menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(MainActivity.this, "Add selected", Toast.LENGTH_SHORT).show();
break;
case R.id.delete_item:
Toast.makeText(MainActivity.this, "Delete Selected", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
menu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
Toast.makeText(MainActivity.this, "關閉了", Toast.LENGTH_SHORT).show();
}
});
menu.show();
}
在這裡面,我們通過傳入View來 PopupMenu menu。得到這個menu物件後就可以實現功能了,設定監聽,通過判斷點選的item id 來確定點選的是哪裡然後做相應的功能。
menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());
這裡則是獲取到了我們最開始寫好的那個menu.xml.然後 menu.setOnDismissListener這裡面是功能選單關閉後執行的。(選擇功能後關閉,或者直接關閉).
這就是我學習過程中的整體收穫,可能有很多理解有誤或者不是太清楚的地方,僅僅作為一個學習過程的記錄。