Android Action Bar
为应用提供快捷导航、菜单项等,位于屏幕的“最上一行”
基本应用
API(android:minSdkVersion
)11以上默认已添加ActionBar
- XML中隐藏ActionBar
设置android:theme
为带NoActionBar
的主题样式,可以针对APP
全局或具体ACtivity
设置。 - 在Java代码中显示或隐藏
首先获取Action Bar
:getSupportActionBar()
- 隐藏:
acitonBar.hide();
- 显示:
actionBar.show();
- 隐藏:
添加 Action Item
Action Bar
上的一些图标按钮,显示不完整时缩略在选项菜单中,既称为Action Item
。
基本步骤:
-
定义菜单资源文件
其中,菜单项通过属性:app:showAsAction
来控制图标按钮在Action Bar中显示,还是在选项菜单中显示,其值有以下几种:- always:始终显示在Action Bar上
- ifRoom:空间足够时,显示在Action Bar上;否则,显示在选项菜单上。
- never:永不显示在Action Bar上
- withTextL:在Action Bar上显示,文字或图标可能显示不全。
同时,可以通过
android:icon
来指定该菜单项的图标,值为drawable
资源,有图标时在Action Bar上默认只显示图标,长按显示文字。 -
重写
onCreateOptionsMenu()
方法
基本代码如下:MenuInflater mf = new MenuInflater(this); mf.inflate(R.menu.menuID, menu); return super.OncreateOptionMenu(menu);
添加 Action View
在Action Bar上添加一些可视组件,如点击搜索图标,显示输入框。
基本步骤:
扫描二维码关注公众号,回复:
15746824 查看本文章
- 隐藏Action Bar上的显示标题:
getSupportActionBar().setDisplayShowTitleEnabled(false);
- 定义菜单资源文件
在菜单资源文件中,通过属性app:actionViewClass
指定Action View
类,如搜索图标按钮可以使用安卓提供的:android.support.v7.searchVIew
;通过属性app:actionLayout
指定图标布局资源。app:showAsAction
属性和Action Item中相关配置一致 - 重写
onCreateOptionsMenu()
方法
基本代码如下:MenuInflater mf = new MenuInflater(this); mf.inflate(R.menu.menuID, menu); return super.OncreateOptionMenu(menu);
Action Bar 与 Tab
可以将Action Bar设置为多标签页模式(利用Fragment
)
基本步骤:
-
设置Tab模式,并隐藏标题栏
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //设置ActionBar为选项卡模式 actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); //隐藏标题栏
-
添加Tab,并设置Tab监听器(用以处理选中和为被选中事件显示的UI)
actionBar.addTab(actionBar.newTab().setText("Tab标签名"). //将标签页添加ActionBar中 setTabListener(new MyTabListener(this, <Fragment>.class)));
其中,自定义监听器举例如下:
package com.mingrisoft; import android.app.Activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBar; /** * Created by Administrator on 2016/5/16. */ public class MyTabListener implements android.support.v7.app.ActionBar.TabListener { private android.support.v4.app.Fragment fragment; //定义Fragment private final Activity activity; //定义Activity private final Class aClass; //定义Class public MyTabListener(Activity activity, Class aClass) { //添加构造函数 this.activity = activity; this.aClass = aClass; } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { //判断碎片是否初始化 if (fragment == null) { //如果没有初始化,将其初始化 fragment = Fragment.instantiate(activity, aClass.getName()); ft.add(android.R.id.content, fragment, null); } ft.attach(fragment); //显示新画面 } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { if (fragment != null) { ft.detach(fragment); //删除旧画面 } } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { } }
Fragment实现代码举例如下:
package com.mingrisoft; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by Administrator on 2016/3/17. */ public class Fragment1 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_1,null); //加载布局页面 } }
实现层级导航
在Action Bar中实现返回上一个Activity。
首先在需要设置的Activity中判断父Activity是否为空,然后配置ActionBar显示,基本代码如下:
if (NavUtils.getParentActivityName(FriendsActivity.this) != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //显示向左的箭头图标
}
然后需要在AndroidManiFest.xml
文件中配置其父Activity,举例如下:
<activity
android:name=".FriendsActivity"
android:label="@string/friend">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>