一、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的更多相关文章

  1. 安卓开发_浅谈ListView(SimpleAdapter数组适配器)

    安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...

  2. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  3. 安卓开发_浅谈ListView(自定义适配器)

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...

  4. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  5. 安卓开发_浅谈OptionsMenus(选项菜单)

    Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...

  6. 安卓开发_浅谈ContextMenu(上下文菜单)

    长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个 ...

  7. 安卓开发_浅谈Notification(通知栏)

    Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...

  8. 安卓开发_浅谈ListView之分页列表

    前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...

  9. 安卓开发_浅谈Fragment之事务添加Fragment对象

    我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...

随机推荐

  1. ubuntu 16.04下源码安装opencv3.4

    源码安装opencv,遇到了一些小波折,这里做个备忘吧. 首先要下载源码,路径: https://github.com/opencv/opencv 下载成功后,在opencv的根目录下执行下面操作: ...

  2. 机器学习技法笔记:08 Adaptive Boosting

    Roadmap Motivation of Boosting Diversity by Re-weighting Adaptive Boosting Algorithm Adaptive Boosti ...

  3. Java 项目UML反向工程转化工具

    今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对整个模拟器的框架形成一个大致的认识,而且只会越看越混乱,所以,想到有没有什么工具可以将这些个类以及它 ...

  4. [视频]K8飞刀 HackIE\EXP测试\Post提交

    [视频]K8飞刀 HackIE VS Firefox Hackbar插件功能对比 视频中可看到HackBar有缺陷导致Payload无法执行 链接:https://pan.baidu.com/s/15 ...

  5. “大话架构”阿里架构师分享Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  6. spring cloud+.net core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  7. Neo4j使用Cypher查询图形数据

    Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言 ...

  8. SpringCloud断路器监控面板——Hystrix Dashboard

    一.简介 Hystrix Dashboard是Hystrix的一个组件,Hystrix Dashboard提供一个断路器的监控面板,可以使我们更好的监控服务和集群的状态,仅仅使用Hystrix Das ...

  9. Spring Cloud Gateway入门

    1.什么是Spring Cloud GatewaySpring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技 ...

  10. HTML5 audio元素如何使用js与jquery控制其事件

    前言: 每一次遇见问题想到的就是怎么解决?最好的方法还是查询网络媒体,更好的办法是让自己记忆,只有自己理解到了才真正是属于自己.要做一个订单提醒功能,没有使用audio相关的插件,虽然插件无数,还是喜 ...