Android: Menu trong Android

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é.

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é.

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

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:

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

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

//Xử lý khi click vào sẽ show ra title của item đó

//Xử lý khi click vào sẽ show ra title của item đó

//Lấy ra id của item vừa click

//Lấy ra id của item vừa click

// Hàm sử lý sự kiện khi click vào mỗi item

// Hàm sử lý sự kiện khi click vào mỗi item

// load file menu của chúng ta ở đây.

// load file menu của chúng ta ở đây.

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

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:

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:

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

//Xử lý sự kiện khi click vào từng item

//Xử lý sự kiện khi click vào từng item

//Nạp contextmenu mà chúng ta vừa tạo vào ứng dụng

//Nạp contextmenu mà chúng ta vừa tạo vào ứng dụng

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.

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:

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

(

)

;

           

}

       

}

)

;