0
点赞
收藏
分享

微信扫一扫

Android Action Bar

ITWYY 2022-02-27 阅读 181

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" />
举报

相关推荐

0 条评论