安卓开发_浅谈Action Bar
一、Action Bar
导航栏。是3.0之后出现的。
所以注意使用的时候清单文件要设置下
android:minSdkVersion="11"(至少11)
但如果使用v4包,则不需修改
二、ActionBar常用操作
1、删除Action Bar
因为3.0默认的主题默认创建Action Bar,所以只要设置下主题Theme.Holo.NoActionBar
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
2、隐藏Action Bar
ActionBar actionBar = getActionBar();
if(actionBar.isShowing())
actionBar.hide();
3、显示Action
ActionBar actionBar = getActionBar();
if(!actionBar.isShowing())
actionBar.show();
4、添加操作性,在ActionBar中显示菜单项
大致的实现步骤和菜单实现差不多,只需要修改 android:showAsAction 属性
(1)在res-menu文件夹下添加菜单项
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_call"
android:orderInCategory=""
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_call"
android:title="拨号"/>
<item
android:id="@+id/action_help"
android:orderInCategory=""
android:showAsAction="always|withText"
android:icon="@android:drawable/ic_menu_help"
android:title="帮助"/>
<item
android:id="@+id/action_camera"
android:orderInCategory=""
android:showAsAction="collapseActionView"
android:icon="@android:drawable/ic_menu_camera"
android:title="相机"/>
<item
android:id="@+id/action_delete"
android:orderInCategory=""
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_delete"
android:title="删除"/>
</menu>
可以看出和以前创建菜单项的时候 android:showAsAction 属性发生了变化
android:showAsAction 有五个属性值
android:showAsAction="never" 不显示在ActionBar中(默认值)
android:showAsAction="always" 一定显示在ActionBar中
android:showAsAction="withText" 显示菜单项文字
android:showAsAction="ifRoom" 如果ActionBar有位置就显示
android:showAsAction="collapseActionView" 将该ActionView折叠成普通菜单项。最低API=
按钮响应事件还是onOptionsItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_call:
Toast.makeText(getApplicationContext(), "打电话",).show();
break;
case R.id.action_camera:
Toast.makeText(getApplicationContext(), "照相机",).show();
break;
case R.id.action_delete:
Toast.makeText(getApplicationContext(), "删除",).show();
break;
case R.id.action_help:
Toast.makeText(getApplicationContext(), "帮助",).show();
break; default:
break;
} return super.onOptionsItemSelected(item);
}
响应事件
效果图:

5、分割菜单栏
在API级别14以上(Android4.0),可以启用ActionBar的分隔操作栏模式,在屏幕的底部会显示一个独立的横条,用于显示Activity在窄屏或者竖屏上运行时的所有操作项
但是只是在底部显示所有的操作项,而导航条和标题元素依然留在顶部
在<application>或<activity>元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:uiOptions="splitActionBarWhenNarrow"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
效果图:

三、ActionBarTab.导航选项标签
你想要在一个Activity中提供导航选择标签时,使用操作栏的选项标签是一个非常好的选择,因为系统会调整操作栏选项标签来适应不同尺寸的屏幕的需要---在屏幕足够宽的时候,导航选项标签会被放到主操作栏中;当屏幕太窄的时候,选项标签会被放到一个分离的横条中
当宽度有足够的位置时,导航选项标签会被放到主操作栏中;
当屏幕太窄的时候,选项标签会被放到一个分离的横条中
创建导航标签步骤
* 使用ActionBar的Tab导航
* 1、设置ActionBar的导航模式为TABS
* 2、当前Activity实现ActionBar.TabListener接口(Tab的选择与取消等事件)
* 3、通过ActionBar类对象的newTab()来创建选项卡,同时设置显示的标题和事件监听
* 4、通过ActionBar类对象的addTab()方法,将创建的Tab增加到ActionBar中
* 5、设置ActionBar选择事件监听
看一个Demo ,
设置四个导航标签,点击一个导航标签,显示对应的Fragment
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu; public class MainActivity extends Activity implements TabListener { private ActionBar actionBar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //不要忘记这两行,设置ActionBar的导航模式为TABS
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); initTab();
} private void initTab() {
// TODO Auto-generated method stub
actionBar.addTab(actionBar.newTab().setText("热点").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("军事").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("国内").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("国外").setTabListener(this));
} @Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub } @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
//当ActionBar中某一Tab被选择,执行此方法,此时显示此Tab对应的Fragment
ContentFragment cf = ContentFragment.newInstance(tab.getText().toString());
ft.replace(R.id.showfragment, cf); } @Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
}
MainActivity
import java.util.List; import android.app.ListFragment;
import android.os.Bundle;
import android.widget.ArrayAdapter; public class MyFragment extends ListFragment{ private ArrayAdapter<String> adapter; public static MyFragment newInstance(String title)
{
MyFragment cf = new MyFragment();
Bundle arg = new Bundle();
arg.putString("title", title);
cf.setArguments(arg);
return cf; } @Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//给适配器添加数据
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
String title = getArguments().getString("title").toString();
for(int i=;i<;i++)
{
adapter.add(title+" "+i);
} } @Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//给内置ListView设置适配器,一定要在onCreat()方法之后执行,因为在onCreat方法之后View才被创建
setListAdapter(adapter); } }
MyFragment
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/showfragment"
></FrameLayout>
</RelativeLayout>
layout
安卓开发_浅谈Action Bar的更多相关文章
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 安卓开发_浅谈ContextMenu(上下文菜单)
长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个 ...
- 安卓开发_浅谈Notification(通知栏)
Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...
- 安卓开发_浅谈ListView之分页列表
前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...
- 安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...
随机推荐
- 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
[原文链接]:MyBatis JdbcType 与Oracle.MySql数据类型对应关系详解 1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 2. Mybatis ...
- 离不开的微服务架构,脱不开的RPC细节
服务化有什么好处? 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示: 服务A:欧洲团队维护,技术背景是Java 服务B:美洲团队维护,用C++实现 ...
- Docz 用 MDX 写 React UI 组件文档
Docz 用 MDX 写 React UI 组件文档 前言 为了提升开发效率,创建一套 UI 组件库是一种较为有效的方式之一:可以减少重复工作.提高可复用,所以现在越来越多团队开始创建自己的 UI 组 ...
- Kafka项目实战-用户日志上报实时统计之编码实践
1.概述 本课程的视频教程地址:<Kafka实战项目之编码实践> 该课程我以用户实时上报日志案例为基础,带着大家去完成各个KPI的编码工作,实现生产模块.消费模块,数据持久化,以及应用调 ...
- Feign禁用Hystrix
1.完全禁用Hystrix配置yml文件feign.hystrix.enabled=false 2.部分禁用Hystrix2.1.FeignNoHystrixConfigure.java——编写Fei ...
- leetcode — two-sum-ii-input-array-is-sorted
import java.util.ArrayList; import java.util.List; /** * Source : https://oj.leetcode.com/problems/m ...
- centos7环境开启WIFI热点
1.环境介绍 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ~]# u ...
- Log4j 随笔
对于一个Java开发者而言,Log4j是我们的好朋友了.话说到这里,需要自我检讨一下,这么久以来,凡是用到Log4j的地方,相关的配置文件都是直接拷贝过去,从来都没仔细看过.But thanks Go ...
- python文件处理b模式
执行环境:windows+Python3.51.rb模式,从文件中读取内容,得到的是bytes类型 因为我们使用的是b模式,所以在open函数中不能指定编码格式,所以打印出来的格式的二进制的格式,而我 ...
- 原生js格式化json工具
json格式化小工具,原生js编写,直接上代码: <!DOCTYPE html> <html lang="en"> <head> <met ...