【Android】actionbar显示选项菜单
来源:互联网 发布:恒腾网络未来资产注入 编辑:程序博客网 时间:2024/05/16 12:49
Actionbar是android3.0的重要更新之一。Actionbar位于传统标题栏的位置,也就是显示在屏幕的顶部。
Actionbar提供了如下功能:
1.显示选项菜单optionsMenu的菜单项(Action Item)。
2.使用程序图标作为返回Home主屏或向上的导航操作。
3.提供交互式View作为Action View。
4.提供基于Tab的导航方式,可用于切换多个Fragment。
5.提供基于下拉的导航方式。
下面来看看Actionbar用于显示选项菜单以及Action View。
Activity类:
package com.zzj.ui.actionbardemo;import java.lang.reflect.Field;import java.lang.reflect.Method;import android.app.ActionBar;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.ViewConfiguration;import android.view.Window;import android.widget.Toast;import com.zzj.ui.R;public class ActionbarActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.actionbar_activity);ActionBar actionBar = getActionBar();// 是否显示应用程序图标,默认为trueactionBar.setDisplayShowHomeEnabled(true);// 是否显示应用程序标题,默认为trueactionBar.setDisplayShowTitleEnabled(true);/* * 是否将应用程序图标转变成可点击的按钮,默认为false。 * * 如果设置了DisplayHomeAsUpEnabled为true, * * 则该设置自动为 true。 */actionBar.setHomeButtonEnabled(true);/* * 在应用程序图标的左边显示一个向左的箭头, * * 并且将HomeButtonEnabled设为true。 * * 默认为false。 */actionBar.setDisplayHomeAsUpEnabled(true);forceShowOverflowMenu();}/** * 如果设备有物理菜单按键,需要将其屏蔽才能显示OverflowMenu */private void forceShowOverflowMenu() {try {ViewConfiguration config = ViewConfiguration.get(this);Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");if (menuKeyField != null) {menuKeyField.setAccessible(true);menuKeyField.setBoolean(config, false);}} catch (Exception e) {e.printStackTrace();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.actionbar_menu, menu);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {/* * 将actionBar的HomeButtonEnabled设为ture, * * 将会执行此case */case android.R.id.home:finish();break;case R.id.add:Toast.makeText(this, "添加", Toast.LENGTH_LONG).show();break;// 其他省略...default:break;}return super.onOptionsItemSelected(item);}@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {setOverflowIconVisible(featureId, menu);return super.onMenuOpened(featureId, menu);}/** * 显示OverflowMenu的Icon * * @param featureId * @param menu */private void setOverflowIconVisible(int featureId, Menu menu) {if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {if (menu.getClass().getSimpleName().equals("MenuBuilder")) {try {Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);m.setAccessible(true);m.invoke(menu, true);} catch (Exception e) {Log.d("OverflowIconVisible", e.getMessage());}}}}}主布局文件没什么,省略......
菜单文件res/menu/actionbar_menu.xml:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- action items --> <!-- showAsAction默认为never --> <item android:id="@+id/delete1" android:icon="@android:drawable/ic_menu_camera" android:showAsAction="always" android:title="拍照"/> <item android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" android:showAsAction="ifRoom" android:title="添加"> </item> <item android:id="@+id/delete2" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="ifRoom" android:title="编辑"/> <item android:id="@+id/share" android:icon="@android:drawable/ic_menu_share" android:showAsAction="never" android:title="分享"/> <item android:id="@+id/call" android:icon="@android:drawable/ic_menu_call" android:showAsAction="never" android:title="呼叫"/> <item android:id="@+id/delete3" android:icon="@android:drawable/ic_menu_help" android:showAsAction="never" android:title="帮助"/> <!-- action views --> <item android:id="@+id/search" android:actionViewClass="android.widget.SearchView" android:showAsAction="always" android:title="查询"/> <item android:id="@+id/clock" android:actionLayout="@layout/actionbar_layout_menu" android:showAsAction="always" android:title="时钟"/></menu>时钟布局文件actionbar_layout_menu.xml:
<?xml version="1.0" encoding="utf-8"?><AnalogClock xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" ></AnalogClock>效果:
代码解释见代码中的注释。
4 0
- 【Android】actionbar显示选项菜单
- 【Android】actionbar显示选项菜单
- ActionBar 显示选项菜单
- ActionBar详解(二)--->使用ActionBar显示选项菜单
- ActionBar之使用ActionBar显示选项菜单项
- ActionBar显示选项设置
- 实现点击实体菜单按钮显示选项菜单在actionbar 下面的思想来源
- 实例:ActionBar显示操作选项 以及 点击菜单显示 操作项
- android,actionbar,menu显示,图片,菜单禁用★★★
- ActionBar最近学习整理之一:显示选项内容及菜单项
- android actionbar 添加菜单
- android ActionBarActivity 显示ActionBar
- AndroidStudio android.support.v4.app.FragmentActivity中ActionBar右侧不显示选项的问题
- Android 选项菜单
- 【Android】选项菜单optionsMenu
- android的选项菜单
- Android-OptionMenu选项菜单
- Android菜单选项
- 图的创建 深度优先遍历 广度优先遍历
- C#自定义对象排序(数组/ArrayList)
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- Android从零开始——之Android简介以及开发环境的搭建
- 概率图模型(PGM)学习笔记(四)-贝叶斯网络-伯努利贝叶斯-多项式贝叶斯
- 【Android】actionbar显示选项菜单
- 直接插入排序
- lua编程 全局变量 环境 模块
- Week Part1:2014/11/2
- 快速排序
- union的使用方法
- Java中Collection和Collections的区别
- JavaWeb——Day09_1
- KMP算法