Bài 12: Menu
Nội dung bài học
1.
2.
3.
Option menu và action bar
Context menu
Popup menu
Option menu và action bar
-
Option menu là 1 tập các items cho Activity thường dùng như: Tìm kiếm, cài đặt,
gửi phản hồi, thông tin ứng dụng...
-
Ở hệ điều hành 2.3 hoặc nhỏ hơn thì option menu được hiển thị bằng cách nhấn
Menu button.
-
Ở hệ điều hành 3.0 hoặc lớn hơn thì option menu được hiển thị trên action bar
của màn hình.
Option menu và action bar
1. Tạo option menu bằng xml
<menu xmlns:android=" />xmlns:app=" />xmlns:tools=" />tools:context="com.vietpro.baihocthu12.MainActivity" >
android:id="@+id/action_settings"
android:icon="@drawable/ic_launcher"
android:showAsAction="always"
android:title="Settings"/>
android:id="@+id/action_about"
android:showAsAction="always"
android:title="About"/>
android:id="@+id/action_help"
android:showAsAction="always"
android:title="Help"/>
android:id="@+id/action_search"
Option menu và action bar
Để hiển thị menu phải ghi đè phương thức sau trong file MainActivity
@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;
Xử lý sự kiện click vào từng item trong menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_about:
Toast.makeText(MainActivity.this, "About", Toast.LENGTH_SHORT).show();
break;
case R.id.action_help:
Toast.makeText(MainActivity.this, "Help", Toast.LENGTH_SHORT).show();
break;
default:
break;
Option menu và action bar
Tạo submenu:
android:id="@+id/action_search"
android:showAsAction="always"
android:title="Search">
<menu>
android:id="@+id/action_search_by_name"
android:showAsAction="always"
android:title="Search by name"/>
android:id="@+id/action_search_by_size"
android:showAsAction="always"
android:title="Search by size"/>
</menu>
Option menu và action bar
2. Tạo option menu bằng code
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Đối số 1 là nhóm
//Đối số 2 là Id cho Menu Item
//Đối số 3 là thứ tự xuất hiện của Menu Item
//Đối số 4 là tiêu đề cho Menu Item
menu.add(Menu.NONE, ACTION_SETTINGS_ID, Menu.NONE, "Settings");
menu.add(Menu.NONE, ACTION_SEARCH_ID, Menu.NONE, "Search");
menu.add(Menu.NONE, ACTION_ABOUT_ID, Menu.NONE, "About");
menu.add(Menu.NONE, ACTION_HELP_ID, Menu.NONE, "Help");
return true;
}
Option menu và action bar
Tạo submenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Đối số 1 là nhóm
//Đối số 2 là Id cho Menu Item
//Đối số 3 là thứ tự xuất hiện của Menu Item
//Đối số 4 là tiêu đề cho Menu Item
menu.add(Menu.NONE, ACTION_SETTINGS_ID, Menu.NONE, "Settings");
SubMenu subMenu = menu.addSubMenu(Menu.NONE, ACTION_SEARCH_ID, Menu.NONE, "Search");
subMenu.add(Menu.NONE, ACTION_SEARCH_BY_NAME_ID, Menu.NONE, "Search by name");
subMenu.add(Menu.NONE, ACTION_SEARCH_BY_SIZE_ID, Menu.NONE, "Search by size");
menu.add(Menu.NONE, ACTION_ABOUT_ID, Menu.NONE, "About");
menu.add(Menu.NONE, ACTION_HELP_ID, Menu.NONE, "Help");
return true;
}
Context menu
-
Context menu xuất hiện khi người dùng long - click vào 1 view bất kỳ. Cũng giống như option menu, context menu
cung cấp các action cho người dùng làm 1 việc gì đó.
-
Đăng ký hiển thị context menu cho 1 view
TextView tv = (TextView) findViewById(R.id.tv_hello);
registerForContextMenu(tv);
-
Để hiển thị context menu phải ghi đè phương thức sau:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main, menu);
}
Context menu
-
Xử lý sự kiện click vào mỗi item của menu
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(MainActivity.this, "Search",
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onContextItemSelected(item);
}
Popup menu
Tạo PopupMenu và xử lý sự kiện click trên mỗi item như sau:
private void showPopupMenu(View v){
PopupMenu popupMenu = new PopupMenu(MainActivity.this, v);
MenuInflater menuInflater = getMenuInflater();
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
menuInflater.inflate(R.menu.main, popupMenu.getMenu());
popupMenu.show();
}
Q&A