Android Action Bar

Android Action Bar

为应用提供快捷导航、菜单项等,位于屏幕的“最上一行”

基本应用

API(android:minSdkVersion)11以上默认已添加ActionBar

  • XML中隐藏ActionBar
    设置android:theme为带NoActionBar的主题样式,可以针对APP全局或具体ACtivity设置。
  • 在Java代码中显示或隐藏
    首先获取Action BargetSupportActionBar()
    • 隐藏:acitonBar.hide();
    • 显示:actionBar.show();

添加 Action Item

Action Bar上的一些图标按钮,显示不完整时缩略在选项菜单中,既称为Action Item

在这里插入图片描述

基本步骤:

  1. 定义菜单资源文件
    其中,菜单项通过属性:app:showAsAction来控制图标按钮在Action Bar中显示,还是在选项菜单中显示,其值有以下几种:

    • always:始终显示在Action Bar上
    • ifRoom:空间足够时,显示在Action Bar上;否则,显示在选项菜单上。
    • never:永不显示在Action Bar上
    • withTextL:在Action Bar上显示,文字或图标可能显示不全。

    同时,可以通过android:icon来指定该菜单项的图标,值为drawable资源,有图标时在Action Bar上默认只显示图标,长按显示文字。

  2. 重写onCreateOptionsMenu()方法
    基本代码如下:

    MenuInflater mf = new MenuInflater(this);
    mf.inflate(R.menu.menuID, menu);
    return super.OncreateOptionMenu(menu);
    

添加 Action View

在Action Bar上添加一些可视组件,如点击搜索图标,显示输入框。

基本步骤:

扫描二维码关注公众号,回复: 15746824 查看本文章
  1. 隐藏Action Bar上的显示标题:getSupportActionBar().setDisplayShowTitleEnabled(false);
  2. 定义菜单资源文件
    在菜单资源文件中,通过属性app:actionViewClass指定Action View类,如搜索图标按钮可以使用安卓提供的:android.support.v7.searchVIew;通过属性app:actionLayout指定图标布局资源。app:showAsAction属性和Action Item中相关配置一致
  3. 重写onCreateOptionsMenu()方法
    基本代码如下:
    MenuInflater mf = new MenuInflater(this);
    mf.inflate(R.menu.menuID, menu);
    return super.OncreateOptionMenu(menu);
    

Action Bar 与 Tab

可以将Action Bar设置为多标签页模式(利用Fragment)
基本步骤:

  1. 设置Tab模式,并隐藏标题栏

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  //设置ActionBar为选项卡模式
    actionBar.setDisplayOptions(0, 	ActionBar.DISPLAY_SHOW_TITLE);  //隐藏标题栏
    
  2. 添加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>

猜你喜欢

转载自blog.csdn.net/teolih/article/details/118759943
bar