Android: Menu trong Android

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Menu là control rất được hay sử dụng trong Android. Có 3 loại menu đó là OptionMenu, ContextMenu và PopupMenu. Mình sẽ giới thiệu lần lượt từng loại cho các bạn. Các bạn cùng theo dõi và làm theo nhé.

1. OptionMenu trong Android

Mỗi ứng dụng có thể mở ra một menu để hiển thị các hành động thông qua một popup. Các Option menu chỉ tồn tại nếu thiết bị có hỗ trợ phím “option”. Nhưng mặc dù có sẵn phím này, Android 4.0 trở lên khuyến khích người lập trình sử dụng ActionBar thay cho menu.

Chúng ta cùng tạo một project demo về OptionMenu nhé.

B1. Tạo project mới có tên MenuDemo.

Tại mục res bạn phím phải rồi chọn New > Directory để tạo một thư mục chứa menu và lưu ý là bạn phải đặt chính xác tên thư mục là menu (đây là thư mục android tạo ra để chứa các file menu.xml) (Hình 1).


Hình 1.Tạo một thư mục menu

B2. Tạo file menu xml

Các bạn có thể tạo file menu của bạn bằng cách sau.


Hình 2

Sau đó các bạn đặt tên là mymenu. Các bạn thiết kế menu như đoạn code sau:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/mnAdd"
android:title="Add"
android:orderInCategory="100" />
<item
android:id="@+id/mnEdit"
android:title="Edit"
android:orderInCategory="100" />
<item
android:id="@+id/mnDelete"
android:title="Delete"
android:orderInCategory="100" />
</menu>

Các bạn có thể thấy menu gồm có 3 item có id và title riêng.

B3. Viết code để load menu.

Các bạn vào file main và viết code như sau:

package devpro.com.menudemo;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// load file menu của chúng ta ở đây.
getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
// Hàm sử lý sự kiện khi click vào mỗi item
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Lấy ra id của item vừa click
int id = item.getItemId();
//Xử lý khi click vào sẽ show ra title của item đó
switch(id){
case R.id.mnAdd:
Toast.makeText(getApplicationContext(),"Add clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.mnEdit:
Toast.makeText(getApplicationContext(),"Edit clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.mnDelete:
Toast.makeText(getApplicationContext(),"Delete clicked", Toast.LENGTH_SHORT).show();
break;
return super.onOptionsItemSelected(item);
}
}

Và bạn hãy run thử coi.

2. ContextMenu trong Android

Bạn cũng có thể chỉ định một ContextMenu (menu ngữ cảnh) cho một View. Nó được kích hoạt thông qua hành động long-click (nhấn và giữ một lúc rồi nhả ra) lên View. Một context menu cho một View được đăng ký thông qua hàm registerForContextMenu(view). Hàm onCreateContextMenu() sẽ được gọi mỗi khi context menu được kích hoạt.

Chúng ta cùng đi vào chi tiết các bước làm context menu nhé.

Bước 1. Chúng ta sẽ tiếp tục sử dụng project MenuDemo ở trên. Giờ ta sẽ thiết kế thêm một button là ContextMenu như sau:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_marginTop="25dp"
android:layout_gravity="center"
android:textSize="25sp"
android:text="Menu Demo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
 
<Button
android:id="@+id/btnContextMenu"
android:layout_marginTop="25dp"
android:text="ContextMenu"
android:layout_width="fill_parent"
android:layout_height="50dp" />
</LinearLayout>

Bước 2. Các bạn tạo thêm 1 file layout menu có tên là context_menu.xml có dạng như sau:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/cmnRed"
android:title="Red"
android:orderInCategory="100" />
 
<item
android:id="@+id/cmnGreen"
android:title="Green"
android:orderInCategory="100" />
<item
android:id="@+id/cmnBlue"
android:title="Blue"
android:orderInCategory="100" />
</menu>

Bước 3. Xử lý code để đăng ký trong mainActivity như sau:

package devpro.com.menudemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btnContextMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnContextMenu = (Button) findViewById(R.id.btnContextMenu);
//Đăng ký ContextMenu cho button
registerForContextMenu(btnContextMenu);
}
// Context Menu
//Nạp contextmenu mà chúng ta vừa tạo vào ứng dụng
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_layout, menu);
}
//Xử lý sự kiện khi click vào từng item
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.mnRed:
Toast.makeText(getApplicationContext(),"Red clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.mnGreen:
Toast.makeText(getApplicationContext(),"Green clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.mnBlue:
Toast.makeText(getApplicationContext(),"Blue clicked", Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
}

Các chú ý:

- Hàm onCreateContextMenu dùng để nạp Context Menu XML vào ứng dụng.

- Hàm onContextItemSelected dùng để xử lý sự kiện.

Sau khi đã hoàn thành code, các bạn chạy ứng dụng xem sao.

3. Popup menu trong 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 nó. Các android.widget.PopupMenu là lớp con trực tiếp của lớp java.lang.Object.

Các bước xây dựng popup menu:

Bước 1. Ta vẫn sử dụng project ở phần 1 và 2. Ta tạo thêm một button nằm bên dưới button context.

Bước 2. Tương tự như 2 phần trên, ta tạo file layout cho popupmenu như sau:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/pmnOne"
android:title="One"
android:orderInCategory="100" />
<item
android:id="@+id/pmnTwo"
android:title="Two"
android:orderInCategory="100" />
<item
android:id="@+id/pmnThree"
android:title="Three"
android:orderInCategory="100" />
</menu>

Bước 3. Ta thêm những dòng code sau vào hàm onCreate():

btnPopupMenu = (Button) findViewById(R.id.btnPopupMenu);
//bắt sự kiện cho button
        btnPopupMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Khởi tạo 1 popupmenu
                PopupMenu popupMenu = new PopupMenu(getApplicationContext(), btnPopupMenu);
                //đẩy layout của mình vừa tạo ở trên vào ứng dụng
                popupMenu.getMenuInflater().inflate(R.menu.popup_menu_layout, popupMenu.getMenu());
                //Sự kiện click vào item của menu
           popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        Toast.makeText(MainActivity.this,"You Clicked : " menuItem.getTitle(),Toast.LENGTH_SHORT).show();
                        return true;
                    }
                });
                popupMenu.show();
            }
        });

Các bạn chú ý đọc code, đặc biệt là phần chú thích trong code.

» Tiếp: Cài đặt trình điều khiển USB OEM
« Trước: Animation trong Android
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!