Popup menu trong Android
Android Popup Menu hiển thị menu bên dưới văn bản neo nếu không gian có sẵn nếu không ở trên các văn bản neo. Nó biến mất nếu bạn nhấp vào bên ngoài popup menu. Các android.widget.PopupMenu là lớp con trực tiếp của lớp java.lang.Object.
Phương thức thường sử dụng trong PopupMenu
1. setOnMenuItemClickListener: Phương thức này được sử dụng để gắn listener cho đối tượng PopupMenu, khác với menu ngữ cảnh và menu tùy chọn là 2 loại menu này đã có sẵn trong Activity và View nên chúng ta không cần gọi trực tiếp ra như đối tượng menu popup.
2. show(): Sau khi tạo PopupMenu,
chúng ta phải gọi phương thức show()
nếu muốn hiện menu này ra.
3. onMenuItemClick(): Phương thức onOptionsItemSelected() sẽ xử lý sự kiện click menu. Phương thức này nhận vào một đối tượng android.view.MenuItem.
Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm có 1 TextView và 1 Button. Khi người sử dụng click vào Button "Show menu" một PopupMenu sẽ xuất hiện. Tiến hành tạo project, vào thư mục res /layout -> activity_main.xml thiết kế giao diện sau:
Bước 1: Tạo một project tên là PopupMenu: File->New->Android Application Project điền các thông tin ->Next ->Finish
Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code trong Relaytive Layout.
<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" 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="hiepsiit.com.popupmenu.MainActivity" > <TextView android:id="@+id/tvId" android:layout_width="fill_parent" android:background="#ff00" android:layout_height="wrap_content" android:layout_marginTop="10dip"/> <Button android:id="@+id/btnId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/tvId" android:layout_below="@+id/tvId" android:layout_marginLeft="36dp" android:layout_marginTop="158dp" android:onClick="onClick" android:text="@string/btn_label" /> </RelativeLayout>
Bước 3: Trong tập tin strings.xml
chúng ta định nghĩa danh sách các item dùng cho PopupMenu.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">MainActivity</string> <string name="btn_label">Show menu</string> <string name="item1">Item 1</string> <string name="item2">Item 2</string> </resources>
Bước 4: Trong thư mục res/menu tạo môt tập tin popup_menu.xml. Bên trong tập tin này chúng ta sử dụng thẻ menu để khai báo menu
và thẻ item
để khai báo các item
trong menu đó.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/settings" android:title="@string/item1"/> <item android:id="@+id/tools" android:title="@string/item2"/> </menu>
Bước 5: Thiết lập sự kiện cho Button "Show menu"
public void onClick(View v) { PopupMenu pm = new PopupMenu(this, v); pm.getMenuInflater().inflate(R.menu.popup_menu, pm.getMenu()); pm.setOnMenuItemClickListener(this); pm.show(); }
Trong phương thức onClick(), chúng ta sẽ hiển thị popup menu bằng lớp MenuInflater giống như menu ngữ cảnh và menu tùy chọn. Ngoài ra ở đây chúng ta phải gắn listener cho đối tượng PopupMenu này thông qua phương thức setOnMenuItemClickListener(), khác với menu ngữ cảnh và menu tùy chọn là 2 loại menu này đã có sẵn trong Activity và View nên chúng ta không cần gọi trực tiếp ra như đối tượng menu popup. Sau khi tạo PopupMenu, chúng ta phải gọi phương thức show() nếu muốn hiện menu này ra.
Bước 6: Bên trong phương thức onMenuItemClick(),
chúng ta thiết lập giá trị của TextView
là giá trị của menu item đã được click.
@Override public boolean onMenuItemClick(MenuItem item) { tv.setText(item.toString() + " selected"); return true; }
Toàn bộ code trong MainActivity.java
package hiepsiit.com.popupmenu; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.TextView; public class MainActivity extends Activity implements OnMenuItemClickListener{ private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tvId); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void onClick(View v) { PopupMenu pm = new PopupMenu(this, v); pm.getMenuInflater().inflate(R.menu.popup_menu, pm.getMenu()); pm.setOnMenuItemClickListener(this); pm.show(); } @Override public boolean onMenuItemClick(MenuItem item) { // TODO Auto-generated method stub tv.setText(item.toString()+" đã chọn"); return false; } }
Ứng dụng này được phát triển bởi adt bundle, android 4.2 sử dụng minimum sdk 11 and target sdk 21.
Kết quả khi chạy ứng dụng:
Sau đó click Button "Show menu":
Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com