1、Action Bar隐藏
如果想整个程序没有Action Bar,把Application的theme设置成NoActionBar即可,如果只是想某个activity没有Action Bar,把Activity的theme设置成NoActionBar即可。
2、Java隐藏显示
actionBar = getSupportActionBar(); //获取ActionBar动作栏
action_show = (Button) findViewById(R.id.actionBar_show); //获取显示按钮
action_hide = (Button) findViewById(R.id.actionBar_hide); //获取隐藏按钮
action_show.setOnClickListener(l); //为显示按钮设置监听事件
action_hide.setOnClickListener(l); //为隐藏按钮设置监听事件
}
View.OnClickListener l = new View.OnClickListener() { //创建一个新的监听事件l
@Override
public void onClick(View v) {
switch (v.getId()) { //根据选择按钮的id判断
case R.id.actionBar_show:
actionBar.show(); //显示ActionBar动作栏
break;
case R.id.actionBar_hide:
actionBar.hide(); //隐藏ActionBar动作栏
break;
}
}
};
3、添加 Action Item
3.1、添加menu.xml
app:showAsAction:用于设置是否显示在bar,还是溢出菜单。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:icon="@drawable/search"
android:title="@string/search"
app:showAsAction="always"></item>
<item
android:id="@+id/bell"
android:icon="@drawable/bell"
android:title="@string/bell"
app:showAsAction="always"></item>
<item
android:id="@+id/settings"
android:title="@string/settings"
app:showAsAction="ifRoom"></item>
<item
android:id="@+id/about"
android:title="@string/about"
app:showAsAction="never"></item>
</menu>
3.2、重写onCreateOptionsMenu方法,解析菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater(); //实例化一个MenuInflater对象
inflater.inflate(R.menu.menu,menu); //解析菜单文件
return super.onCreateOptionsMenu(menu);
}
4、添加Action View
4.1、添加menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"//自带的search View
app:showAsAction="always"
></item>
<item
android:id="@+id/img1"
android:title="@string/img1"
app:actionLayout="@layout/img_message"//img_message是一个布局文件名
app:showAsAction="always"></item>
<item
android:id="@+id/img2"
android:title="@string/img2"
app:actionLayout="@layout/img_add"
app:showAsAction="always"></item>
</menu>
4.2重写onCreateOptionsMenu方法,解析菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//隐藏ActionBar中显示的标题
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater(); //实例化一个MenuInflater对象
inflater.inflate(R.menu.menu,menu); //解析菜单文件
return super.onCreateOptionsMenu(menu);
}
5、Action Bar的Tab导航功能
5.1、创建5个Fragment和相应的类
5.2、继承android.support.v7.app.ActionBar.TabListener实现各标签页的切换
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) {
}
}
5.3、设置ActionBar为选项卡模式
ActionBar actionBar=getSupportActionBar(); //获取ActionBar
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //设置ActionBar为选项卡模式
actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); //隐藏标题栏
actionBar.addTab(actionBar.newTab().setText("词典"). //将标签页添加ActionBar中
setTabListener(new MyTabListener(this, Fragment1.class)));
actionBar.addTab(actionBar.newTab().setText("百科"). //将标签页添加ActionBar中
setTabListener(new MyTabListener(this, Fragment2.class)));
actionBar.addTab(actionBar.newTab().setText("翻译").将标签页添加ActionBar中
setTabListener(new MyTabListener(this, Fragment3.class)));
actionBar.addTab(actionBar.newTab().setText("发现").//将标签页添加ActionBar中
setTabListener(new MyTabListener(this, Fragment4.class)));
actionBar.addTab(actionBar.newTab().setText("我的").//将标签页添加ActionBar中
setTabListener(new MyTabListener(this, Fragment5.class)));
6、实现层级导航
6.1、在子类的OnCreate方法中判断是否存在父Activity,不为空显示导航图标
if (NavUtils.getParentActivityName(FriendsActivity.this) != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //显示向左的箭头图标
}
6.2、在AndroidManifest.xml文件中的子activity中添加如下代码来添加父activity
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />