• Android中ActionBar的使用


    ActionBar是一个显示在屏幕顶部的控件,它包括了在左边显示的应用的logo图标和右边操作菜单的可见项。

    ActionBar的基本操作

    • 启用ActionBar

    Android3.0版本已经默认使用了ActionBar,因此只要在Mainifest.xml中配置的targetSdkVersion高于11(Android3.0),则默认会使用ActionBar。

    <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="14" />
    • 关闭ActionBar

    如果希望关闭ActionBar,我们可以在Mainifest.xml设置application或者activity的主题为NoActionBar即可:

    <application
            android:theme="@android:style/Theme.Holo.NoActionBar" >
    <activity
            android:theme="@android:style/Theme.Holo.NoActionBar">
    • 获得ActionBar对象
     ActionBar actionbar = getActionBar();
    • 显式和隐藏ActionBar
    actionbar.show();  //显示
     actionbar.hide();  //隐藏
    • 隐藏ActionBar栏中的标题和图标
    actionbar.setDisplayShowHomeEnabled(false);  //隐藏图标
    actionbar.setDisplayShowTitleEnabled(false);  //隐藏标题

    使用代码添加ActionItem

    在Activity中重写onCreateOptionsMenu(Menu menu)方法:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
             super.onCreateOptionsMenu(menu);
             MenuItem additem =menu.add(0, 1, 0, "add"); 
             MenuItem deleteitem =menu.add(0, 2, 1, "delete");
             MenuItem openitem =menu.add(0, 3, 2, "open");
             additem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             deleteitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             openitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             return true;
        }

    如下效果:

    image

    ps.从代码看出,我们是通过add方法添加菜单条目,然后通过setShowAsAction方法把菜单条目作为ActionBar的操作项显示。

    • add方法参数说明:

    groupId:是指组ID,用以批量地对菜单子项进行处理和排序

    itemId:是子项ID,是每一个菜单子项的唯一标识

    order:指定菜单子项在选项菜单中的排列顺序

    titler: 菜单标题

    • setShowAsAction方法参数说明

    setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS): 始终将该MenuItem显示在ActionBar上。

    setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM) :只有在有足够空间时才显示,否则放入到溢出菜单中。

    setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT) : 将该MenuItem显示在ActionBar上,且横屏时显示其文本。

    setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) : 把该MenuItem放入menu键的普通菜单项中。

    使某个ActionItem有子菜单

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
             super.onCreateOptionsMenu(menu);
             MenuItem additem =menu.add(0, 1, 0, "add");
             MenuItem deleteitem =menu.add(1, 2, 1, "delete");
             additem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             deleteitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
            
             SubMenu moremenu =menu.addSubMenu(2,3,2,"more");  //more包含子菜单
              moremenu.add("open");
             moremenu.add("close");
             MenuItem moremenuitem = moremenu.getItem(); 
             moremenuitem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             return true;
        }

    如下效果:

    image

    使用XML文件添加ActionItem

    1、xml代码如下所示:

    <?xml version="1.0" encoding="utf-8"?>  
    <menu xmlns:android="http://schemas.android.com/apk/res/android">  
        <item android:id="@+id/menu_save"  
              android:icon="@android:drawable/ic_menu_add"  
              android:title="menu_save"  
              android:showAsAction="always|withText" />  
         <item android:title="more"
               android:icon="@android:drawable/ic_menu_info_details"  
                android:showAsAction="always">
             <menu>
                <group android:checkableBehavior="none">
                        <item android:id="@+id/menu_save1"  
                      android:title="关于"  
                      android:showAsAction="always|withText" />  
                        <item android:id="@+id/menu_save2"  
                      android:title="建议"  
                      android:showAsAction="always|withText" />  
                </group>
                </menu>
        </item>     
    </menu>

    2、在Activity中重写onCreateOptionsMenu(Menu menu)方法:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
             super.onCreateOptionsMenu(menu);
             MenuInflater inflater =getMenuInflater();
             inflater.inflate(R.menu.mymenu, menu);  //加载menu文件
              return true;
        }

    效果如下所示:

    image

    使用分离式操作栏

    当启用分隔操作栏模式时,在屏幕的底部会显示一个独立的横条,用于显示Activity在在窄屏设备(如竖屏手机)上运行时的所有操作项。

    只需要在Mainifest.xml中设置application或者activity的uiOptions即可:

    <application
            android:uiOptions="splitActionBarWhenNarrow"
            >

    效果如下所示:

    image

    使用应用程序图标导航

    应用图标可以当做操作项来使用。应用程序在这个图标上响应以下两个操作之一:

    •   返回应用程序的主Activity

    1、首先必须调用setHomeButtonEnabled(true)方法,这时图标会多一个箭头,图标处于可被点击状态。

    actionbar.setDisplayHomeAsUpEnabled(true);

     2、然后重写onOptionsItemSelected()方法实现返回应用程序的主Activity的操作

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
             super.onOptionsItemSelected(item);
             switch (item.getItemId()) {
             case android.R.id.home:                          
                Intent intent =new Intent(this,MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                 return true;
            default:
                return super.onOptionsItemSelected(item);
            }
    
        }
    • 向应用程序上级页面导航
    actionbar.setDisplayHomeAsUpEnabled(true);

    然后重写onOptionsItemSelected()方法实现返回应用程序的上一个Activity的操作(代码相似,略)

    ps.addFlags的几个参数就是和Activity的四种加载模式相关了。

    添加操作视窗(Action View)

    只需要在menu文件的item中添加android:actionViewClass(或者也可以自己定义布局文件)即可

    <item android:id="@+id/menu_save"  
              android:icon="@android:drawable/ic_menu_add"  
              android:title="menu_search"  
              android:showAsAction="always|withText"
              android:actionViewClass ="android.widget.SearchView"
               />

    点击搜索图标后效果如下所示:

    image

    ps.如果需要,同时也可以在代码中通过expandActionView()和collapseActionView()方法来展开或折叠操作视窗。

    使用ActionBar实现Tab导航

    1、首先设置action的导航模式并加入几个tab:

    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionbar.addTab(actionbar.newTab().setText("首页").setTabListener(this));
    actionbar.addTab(actionbar.newTab().setText("内容").setTabListener(this));
    actionbar.addTab(actionbar.newTab().setText("问题").setTabListener(this));

    2、然后实现ActionBar.TabListener接口。这个接口中回调方法会响应选项标签上的用户事件(可用于Fragment的切换)

    @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            Toast.makeText(this, String.valueOf(tab.getText()), Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
            
        }

    效果如下图所示:

    image

    添加下拉式导航

    1、调用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法启用操作栏下拉式导航模式。

    2、actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);

    其中mSpinnerAdapter作为适配器加载导航列表中所需要的列表选项布局资源。

         mNavigationCallback实现ActionBar.OnNavigationListener接口,覆写onNavigationItemSelected()方法,

    添加共享组件

    在ActionBar里可以通过ActionProvider很快的实现共享操作。在ShareActionProvider中,你只需要提供一个intent对象,剩下的操作就由它来替你完成。

    1、首先为分享的条目设置android:actionProviderClass属性

    <item android:title="share"
               android:icon="@android:drawable/ic_menu_share"  
                android:showAsAction="always"
                >
             <menu>
                <group android:checkableBehavior="none">
                        <item android:id="@+id/kongjian"  
                      android:title="空间"  
                      android:showAsAction="always|withText" 
                      android:actionProviderClass="android.widget.SharedActionProvider"
                      />  
                        <item android:id="@+id/renren"  
                      android:title="人人"  
                      android:showAsAction="always|withText" 
                      android:actionProviderClass="android.widget.SharedActionProvider"
                      />  
                </group>
                </menu>
        </item>

    2、重写onOptionsItemSelected(MenuItem item)方法,为每个分享条目指定对应的intent

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
            ShareActionProvider mShareActionProvider;
             super.onOptionsItemSelected(item);
             switch (item.getItemId()) {
             case android.R.id.home:                          
                Intent intent =new Intent(this,MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                 return true;
             case R.id.kongjian:
                 mShareActionProvider=(ShareActionProvider)item.getActionProvider();
                 mShareActionProvider.setShareIntent(kongjianintent);
             case R.id.renren:
                 mShareActionProvider=(ShareActionProvider)item.getActionProvider();
                 mShareActionProvider.setShareIntent(renrenintent);
            default:
                return super.onOptionsItemSelected(item);
            }
    
        }
  • 相关阅读:
    &nbsp|&quot|&amp|&lt|&gt等html字符转义
    OpenSSL: 消息摘要算法
    Linux下tcp协议socket的recv函数返回时机分析(粘包)
    ipv6
    Electron 调用系统工具记事本、计算器等
    MySQL 导出函数与存储过程
    远程连接Ubuntu桌面配置
    当Activity继承AppCompatActivity如何实现隐藏标题栏与状态栏
    spring boot 1.5.2 操作mongodb3.4.0
    VScode-Go can't load package: package .: no buildable Go source files in
  • 原文地址:https://www.cnblogs.com/shinefy/p/3960508.html
Copyright © 2020-2023  润新知