Action Bar

1.显示隐藏Action Bar

1.配置上

在application 上的

android:theme="@style/AppTheme"全局配置ActionBar
在某个activity上设置
android:theme="@style/Theme.AppCompat.NoActionBar"配置没有actionBar
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

2.代码中实现ActionBar的显示隐藏

 public void onClick(View v) {
        ActionBar actionBar = getSupportActionBar();  //获取actionBar对象
        switch (v.getId()){
            case R.id.action_btn_show:
                actionBar.show();  //显示
                break;
            case R.id.action_btn_hide:
                actionBar.hide();  //隐藏
                break;
            default:
                break;
        }
    }

2.添加Action Item 的步骤

1.定义菜单资源文件

app:showAsAction:alwary:一直显示在栏上   ifRoom空间够显示在栏上,never显示在更多里面
<?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="search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always">
    </item>
    <item android:id="@+id/bell"
        android:icon="@drawable/bell"
        android:title="消息"
        app:showAsAction="ifRoom">
    </item>
    <item android:id="@+id/setting"
        android:icon="@drawable/bell"
        android:title="设置"
        app:showAsAction="ifRoom">
    </item>
    <item android:id="@+id/link"
        android:icon="@drawable/bell"
        android:title="关于"
        app:showAsAction="ifRoom">
    </item>
</menu>

2.在onCreateOptionsMenu()方法中加载菜单资源文件

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();  //实例化MenuInflater
        inflater.inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

3.添加Action View 的步骤

1.定义菜单资源文件

app:showAsAction:alwary:一直显示在栏上   ifRoom空间够显示在栏上,never显示在更多里面
//使用  app:actionViewClass通过实现类
<item android:>
</item>
//使用 app:actionLayout 属性 通过布局文件
<item android:>
</item>
2.在onCreateOptionsMenu()方法中加载菜单资源文件(同上)

4.ActionBar实现tab导航

1.设置使用Tab导航方式 

 public void initTabBar(){
        //获取actionBar
        ActionBar actionBar = getSupportActionBar();
        //设置不显示标题
        actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_TITLE);
        //设置模式是tab
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        //actionBar.addTab(actionBar.newTab().setText("词典"));
        actionBar.addTab(actionBar.newTab()
                .setText("词典").setTabListener(new MyTabListener(this,AddFragment.class)));
    }

   

2.添加多个Tab标签页,并为每个Tab标签页添加事件监听

/*
  实现各标签页的切换
 */
public class MyTabListener implements TabListener {
    private final Activity activity;//用于指定要加载的Fragment的activity
    private final Class aClass;  //用于指定Fragment要加载的类
    private Fragment fragment;

    public MyTabListener(Activity activity, Class aClass) {
        this.activity = activity;
        this.aClass = aClass;
    }
     //被选择标签页的事件
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        //判断fragment是否初始化
        if(fragment ==null){
            //反射方式实现初始化,参数:上下文对象,类名
            fragment = Fragment.instantiate(activity,aClass.getName());
            //将fragment进行添加
            ft.add(android.R.id.content,fragment,null);
        }
        ft.attach(fragment); //将添加进
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
        //判断fragment是否初始化
        if(fragment !=null){
           ft.detach(fragment);  //删掉
        }
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }
}