.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Tạo option menu trong android


Trong nhiều chương trình, bạn cần đến menu để thực hiện các chức năng gì đó mà không cần phải thả các button đâu đó trên màn hình. Đặc biệt, trong các ứng dụng cần đến nhiều diện tích màn hình, như là các ứng dụng sử dụng camera. Và đặc biệt, menu có ích cho các ứng dụng chạy trên các thiết bị có kích thước màn hình bé. Trong bài post này hướng dẫn các bạn tạo một option menu đơn giản.

menu/main.xml

Trước tiên bạn cần xây dựng một layout cho menu của bạn bằng cách tạo một file main.xml trong thư mục menu của chương trình như sau:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:id="@+id/menu_bookmark"
          android:icon="@drawable/icon_bookmark"
          android:title="Bookmark" />
 
    <item android:id="@+id/menu_save"
          android:icon="@drawable/icon_save"
          android:title="Save" />
 
    <item android:id="@+id/menu_search"
          android:icon="@drawable/icon_search"
          android:title="Search" />
 
    <item android:id="@+id/menu_share"
          android:icon="@drawable/icon_share"
          android:title="Share" />
 
    <item android:id="@+id/menu_delete"
          android:icon="@drawable/icon_delete"
          android:title="Delete" /> 
 
    <item android:id="@+id/menu_preferences_auto"
          android:icon="@drawable/icon_preferences_auto"
          android:title="Auto Preferences" />

    <item android:id="@+id/menu_preferences_manual"
          android:icon="@drawable/icon_preferences_manual"
          android:title="Manual Preferences" />
</menu>

Trong file layout trên, chúng ta sẽ tạo ra một menu với 6 menu item. Nói có 6 menu item nhưng tại sao các bạn đếm thì có đến 7 item? Về điều này mình sẽ giải thích sau ! Đối với mỗi item, các bạn có thể tùy chọn là item của mình là có dạng chữ, hình ảnh, hay kết hợp cả hình ảnh lẫn chữ thì tùy bạn nhé, bằng cách thêm icon, title hoặc bỏ đi các bạn có thể dễ dàng tạo ra điều này. Nhớ là phải kiếm đủ mấy cái file ảnh thả vào trong thư mục drawable.

Main Activity

Trong activity chính, các bạn sẽ phải override phương thức onCreateOptionMenu() để tạo ra menu cho chương trình

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	// TODO Auto-generated method stub
	//return super.onCreateOptionsMenu(menu);
	MenuInflater menuInflater = getMenuInflater();
       menuInflater.inflate(R.menu.main, menu);
       return true;
}

Code khá đơn giản nên mình hổng giải thích thêm.
Tiếp theo mình sẽ ghép các xử lý khi chọn từng menu item bằng cách override phương thức onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	//return super.onOptionsItemSelected(item);
	switch (item.getItemId())
       {
       case R.id.menu_bookmark:
           // Single menu item is selected do something
           // Ex: launching new activity/screen or show alert message
           Toast.makeText(MainActivity.this, "Bookmark is Selected", Toast.LENGTH_SHORT).show();
           return true;
 
       case R.id.menu_save:
           Toast.makeText(MainActivity.this, "Save is Selected", Toast.LENGTH_SHORT).show();
           return true;
 
       case R.id.menu_search:
           Toast.makeText(MainActivity.this, "Search is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_share:
           Toast.makeText(MainActivity.this, "Share is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_delete:
           Toast.makeText(MainActivity.this, "Delete is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_preferences_auto:
           Toast.makeText(MainActivity.this, "Auto is Selected", Toast.LENGTH_SHORT).show();
           return true;

       default:
           return super.onOptionsItemSelected(item);
       }
}

Bình thường thì khi chạy chương trình thì các bạn sẽ thấy mọi sự hiển thị rất đẹp rùi đó. Tại sao mình nói bình thường, vì đôi khi chạy chương trình lên các bạn sẽ thấy trên device của mình ko có button menu ở đâu cho mình chọn hết. Để xử lý điều này các bạn sẽ vào file Menifest của chương trình và thực hiện bỏ đi cái này nhé

android:targetSdkVersion=""

Vậy là mọi sự ok rùi đó

Điều chỉnh đôi chút

Trong trường hợp bạn muốn tạo một menu item mà có hai lựa chọn (2 trạng thái) ví dụ như click 1 cái thì chữ cũng như icon của nó thay đổi, click lại thì nó trở lại như cũ, thì lúc này là lúc dùng đến menu item thứ 7 mà minh đã khai báo bên trên đó (trong file main.xml). Lúc này, bạn cần override phương thức onPrepareOptionsMenu() như sau:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
	// TODO Auto-generated method stub
	super.onPrepareOptionsMenu(menu);
        menu.findItem(R.id.menu_preferences_auto).setVisible(!isVisible);
	menu.findItem(R.id.menu_preferences_manual).setVisible(isVisible);
        return true;
}

Trong đó, bạn sẽ đặt giá trị hiển thị cho hai menu item 6 và 7 thông qua một biến boolean là isVisible được khai báo bên ngoài. Và khi gán sự kiện cho các menu item này, các bạn sẽ thay đổi giá trị của biến này như sau:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	//return super.onOptionsItemSelected(item);
	switch (item.getItemId())
       {
       case R.id.menu_bookmark:
           // Single menu item is selected do something
           // Ex: launching new activity/screen or show alert message
           Toast.makeText(MainActivity.this, "Bookmark is Selected", Toast.LENGTH_SHORT).show();
           return true;
 
       case R.id.menu_save:
           Toast.makeText(MainActivity.this, "Save is Selected", Toast.LENGTH_SHORT).show();
           return true;
 
       case R.id.menu_search:
           Toast.makeText(MainActivity.this, "Search is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_share:
           Toast.makeText(MainActivity.this, "Share is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_delete:
           Toast.makeText(MainActivity.this, "Delete is Selected", Toast.LENGTH_SHORT).show();
           return true;

       case R.id.menu_preferences_auto:
           Toast.makeText(MainActivity.this, "Auto is Selected", Toast.LENGTH_SHORT).show();
           isVisible=true;
           return true;

       case R.id.menu_preferences_manual:
           Toast.makeText(MainActivity.this, "Manual is Selected", Toast.LENGTH_SHORT).show();
           isVisible=false;
           return true;
       default:
           return super.onOptionsItemSelected(item);
       }
}
Advertisements

2 responses to “Tạo option menu trong android

  1. chillstep November 23, 2012 at 2:48 AM

    Bonjour my name is Jill and I’m a student and this website really helped me. I’m inspired! Thanks!

  2. Hoàng Minh November 23, 2012 at 6:44 PM

    Can you read Vietnamese? If not, why did you say that

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: