博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActionBar
阅读量:5290 次
发布时间:2019-06-14

本文共 4903 字,大约阅读时间需要 16 分钟。

 

Adnroid 3.0之后已经默认开启了ActionBar功能,ActionBar位于传统标题栏的位置。

ActionBar提供如下功能:
1,显示选项菜单的菜单项(将菜单项显示成Action Item)
2,使用程序图标作为返回Home主屏或向上的导航操作
3,提供交互式View作为Action View。
4,提供基于Tab的导航方式,可用于切换多个Fragment
5,提供基于下拉的导航方式下面是使用ActionBar显示选项菜单。

显示选项菜单的菜单项

res/meun/menu.xml

1 
2 3
8 9
10
11
12
13
14
15 16 17 18
20
24
25
26
27
28
29
30
31 32 33
34
36 37 38 39

 

 showAsAction设置成always的效果

showAsAction设置成never的效果

提供交互式View作为Action View

在ActionBar上添加Action View,

定义Item时使用 android:actionLayout="";属性,指定Action View对应的视图资源。

View Code

使用程序图标作为返回Home主屏或向上的导航操作

 

实现非常容易只需设置

actionBar.setDisplayHomeAsUpEnabled(true);

并且重写onOptionsItemSelected()方法

 

@Override    public boolean onOptionsItemSelected(MenuItem item) {        //android.R.id.home是系统的Home主屏id        if (item.getItemId()==android.R.id.home) {            this.finish();        }        return super.onOptionsItemSelected(item);    }
View Code

 

提供基于Tab的导航方式,可用于切换多个Fragment

下面是实现方法:

MainActivity

1 package com.dj.actionbartab; 2  3 import android.app.ActionBar; 4 import android.app.ActionBar.Tab; 5 import android.app.ActionBar.TabListener; 6 import android.app.Activity; 7 import android.app.Fragment; 8 import android.app.FragmentTransaction; 9 import android.os.Bundle;10 import android.view.MenuItem;11 /**12  * ActionBar结合Fragment实现Tab导航功能13  */14 public class MainActivity extends Activity  {15     private ActionBar actionBar;16     @Override17     protected void onCreate(Bundle savedInstanceState) {18         super.onCreate(savedInstanceState);19         setContentView(R.layout.container);20         actionBar = getActionBar();21         // 设置ActionBar的导航方式为Tab22         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);23         // 为ActionBar添加两个Tab页,并设置监听(传入一个fragment)。24         Tab tab = actionBar.newTab();25         tab.setText("第一项");26         tab.setTabListener(new MyTabListener(new MyFragment1()) );27         actionBar.addTab(tab);28         actionBar.addTab(actionBar.newTab().setText("第二项").setTabListener(new MyTabListener(new MyFragment2())));29         //使用程序图标作为返回Home主屏,可以点击,并且有向左的图标30         actionBar.setDisplayHomeAsUpEnabled(true);31     }32     33     /**34      * 实现ActionBar.TabListener接口,构造函数中把fragment传进来,为了更好控制fragment。35      *36      */37     class MyTabListener implements TabListener{38         private Fragment fragment;39         public MyTabListener(Fragment fragment) {40             this.fragment=fragment;41         }42         @Override43         public void onTabSelected(Tab tab, FragmentTransaction ft) {44             /**获得Fragment管理,开启实务,将view替换成fragment,提交事务*/45          ft=getFragmentManager().beginTransaction();46          ft.replace(R.id.container, fragment); 47          ft.commit();48         }49         @Override50         public void onTabUnselected(Tab tab, FragmentTransaction ft) {51             //tab没有被选择的时候调用,移除当前的fragment让下个Tab所对应的fragment进来。52             ft.remove(fragment);53         }54         @Override55         public void onTabReselected(Tab tab, FragmentTransaction ft) {56         }57     }58     @Override59     public boolean onOptionsItemSelected(MenuItem item) {60         //android.R.id.home是系统的Home主屏id61         if (item.getItemId()==android.R.id.home) {62             this.finish();63         }64         return super.onOptionsItemSelected(item);65     }66 67     68 }

两个Fragment

package com.dj.actionbartab;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyFragment1 extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {                return inflater.inflate(R.layout.activity_tab1, null);    }}
View Code
package com.dj.actionbartab;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MyFragment2 extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {                return inflater.inflate(R.layout.activity_tab2, null);    }}
View Code

下面是xml文件:

activity_tab1.xml

View Code

activity_tab2.xml

View Code

container.xml

View Code

 

 

转载于:https://www.cnblogs.com/dj168/p/ActionBar.html

你可能感兴趣的文章
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
Benelux Algorithm Programming Contest 2014 Final(第二场)
查看>>
随机变量的期望为什么把不是自己密度函数当成自己的权重来求期望呢?
查看>>
6-1 并行程序模拟 uva210
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
javascript知识点记录01
查看>>
javascript事件代理
查看>>
es6 新增特性
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
《算法》C++代码 快速排序
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
Js apply方法与call方法详解 附ES6新写法
查看>>
linux php全能环境一键安装,小白福利!
查看>>
Note(2): 一个JavaScript的贷款计算器
查看>>
js原型和原型链
查看>>
AJAX需要注意的
查看>>
ubuntu下中文乱码解决方案
查看>>