Header ads

Header ads
» »  Popup Menu

 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 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à PopupMenuFile->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;  	}  	  	}

Download ví dụ

Ứng dụng này được phát triển bởi adt bundleandroid 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

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn