Android ActionBar(转)

分享到:

本文内容

  • 关于 ActionBar
  • 必要条件
  • 项目结构
  • 环境
  • 演示一:Action Bar 显示隐藏
  • 演示二:Action Item 显示菜单选项
  • 演示三:Action Home 启用“返回/向上”程序图标导航
  • 演示四:Action View 显示 UI 组件

11

如果你想使用 ActionBarSherlock,那么最好先研习一下原生的 Android ActionBar。最近打算用 Android 自己写个 APP,用了三方库 ActionBarSherlock,我也是 Android 刚入门,能够实现一些常见的功能和效果,对 Android 已经有个总体的认识~但结果被 ActionBarSherlock 搞得很不爽,本来觉得应该不太会难啊,毕竟编程也有年头了(虽说我是搞 .NET C# 的,但 Java 跟 C# 有 90% 的相似度,微软搞 C# 的人,就是当初搞 Java 的人,C# 在 1.0 版本时的确很烂,直到 2.0 版本才大为改观。我没用 Java 做过项目,但也不至于对 Java 一无所知……),可搜索了一些资料和示例后,感觉,简单搞一下还行,但要达到做项目的程度,还是复杂了点,到现在都没能领会 ActionBarSherlock~

经过一晚的反思,我发现,我还是需要从头开始,研究一下原生的 Android ActionBar,当时只是大概看了一下……结果,也顺道解决了我的另一个问题。我们知道,编写电脑应用程序时,都会初始化页面,Android 也是如此,但我一致没搞明白,比如,Tab 页,或是 ViewPager 这样的效果,如何实现初始化每个页,或是每个 Pager。别告诉我 Fragment,我说的是实现的代码。

本文主要演示原生 Android ActionBar 的使用。包括:

  • Action Bar 显示隐藏
  • Action Item 显示菜单选项
  • Action Home 启用“返回/向上”程序图标导航
  • Action View 显示 UI 组件

但在正式说明原生 ActionBar 实现的一些功能前,先大概了解一下。

下载 Demo

(下载有错,请留言!)

关于ActionBar


“操作栏”对于 Android APP 来说是最重要的设计元素。它通常在应用运行的所有时间都待在屏幕顶部。

操作栏的主要目的是:

  • 突出重要的操作(例如“新建”和“搜索”),并且可以方便的使用。
  • 在应用内提供统一的导航和视图切换体验。
  • 将较少使用的功能收集到“更多操作”菜单中,减少界面上的杂乱布局。
  • 为你的应用提供一个展示其特点的空间。

如果你是编写 Android APP 新手,请注意操作栏是需要实现的最重要的设计元素。根据下面的指导来设计你的 APP,使其和 Android 核心应用达到统一的界面体验。

对于大多数应用,操作栏可以分割为 4 个不同的功能区域。

221736426826148

图 1 活动栏

  • 1. 应用图标

应用图标是应用的标识。在应用图标的位置放置你自己的 logo。

注意:如果当时应用不在顶层界面,那么在图标左边放置一个向左的箭头,表示“向上”按钮,使用户可以回到上一级界面。“向上”按钮的更多细节,请查看 导航 一节。

  • 2. 视图控制

如果你的 APP 通过多个不同的视图显示数据,那么视图控制区域将允许用户切换视图。可以使用下拉菜单或者标签控件来实现。

但如果你的 APP 没有多个视图,那么你可以在这里显示不可操作的内容,例如标题或者品牌信息。

  • 3. 操作按钮

显示应用中最重的操作。如果图标放不下了,就自动移入“更多操作”菜单。

  • 4. 更多操作

将使用频率低的操作放在这个菜单里。

区分这4个区域很重要。比如,应该在“操作按钮”区域放置那些操作,最常见的就是“搜索”,你总不能把使用频率这么高的操作“藏”在很深的位置吧,用户一定天天咒你~再比如,在“更多操作”区域,放置使用频率较低的操作,可以即便是使用较低,也要仔细安排那些操作的顺序~

参考 Andriod 关于操作栏 ActionBar 的设计原则

 

必要条件


ActionBar 是 Android 3.0 的重要更新之一。必须在 AndroidManifest.xml 文件的 SDK 配置中指定该应用的版本高于 11(Android 3.0 的版本号)。在本演示中,minSdkVersion 的值必须高于 14,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.nativeactionbardemo"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <!-- 使用 ActionBar minSdkVersion 至少为 14 -->
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ActionBarTest"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Holo.Light" >
        </activity>
        <activity
            android:name=".ActionItemTest"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name=".FirstActivity"
            android:label="@string/app_name" >
        </activity>
        <activity android:name=".SecondActivity" >
        </activity>
        <activity android:name=".ActionHomeTest" >
        </activity>
        <activity android:name=".ActionViewTest" >
        </activity>
    </application>
 
</manifest>
昵    称:
验证码:

相关文档:

  • 一个Android Socket的例子
    1.开篇简介 Socket本质上就是Java封装了传输层上的TCP协议(注:UDP用的是DatagramSocket类)。要实现Socket的传输,需要构建客户端和服务器端...
  • android 系统 makefile文件(Android.mk)组织结构
    Android.mk脚本结构 下面是main.mk文件包含关系,本文档主要说明的就是这些文件里到底做了什么。(这个文件被根目录下的makefile文件包含...
  • Android中bitmap的相关处理
    加载大图片 Optionsoptions=newOptions(); options.inJustDecodeBounds=true;//不加载图片,只加载文件信息 //加载图片,获取到配置信息 BitmapFactory.deco...
  • Android实现ImageView加边框
    http://www.android-study.com/jiemiansheji/151.html...
  • Android 快速开发框架AFinal_软引用
    经不建议使用弱引用,android2.3后强行回收软引用和弱...引用,详情查看android官方文档), 更好的管理bitm... AFinal是android的orm和ioc框架,...
  • android 进阶之android中隐藏的layout (抽屉)
    main.xml <?xmlversion="1.0"encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width...
  • Android刷新本地相册
    发现程序把图片保存到sdcard后,在相册里面找不到,只有在sdcard重新装载后会出现图片;...
  • [Android Studio] Android Studio中查看类的继承关系
    转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在AndroidStudio常用快捷键这篇文章中,有写了。今天...
  • ANDROID基础知识普
    1、ANDROID系统现在有多个版本分别是1.5、1.6、2.0.1、2.12.22.3软件基本上是通用的,现在比较主流的系统版本为2.2或2.1,最新的是2.3系统,不...
  • Android中ListView下拉刷新的实现
    ListView中的下拉刷新是非常常见的,也是经常使用的,看到有很多同学想要,那我就整理一下,供大家参考。那我就不解释,直接上代码...
  • Android修行笔记(一):用Tabhost以及Fragment实现标签式主界面框架
    吐槽开始学习Android,第一个掉入的坑就是标签式界面。好像Android一开始的版本就不是很好支持这个东西。 后来才出了Fragment这个新的UI...
  • Android服务之网络服务发现服务
    自android 4.1 开始实现了一个网络服务的发现服务NsdService,其基于苹果的Bonjour服务发现协议,支持远程服务的发现和零配置。...
  • 【Android】Android ListViewAnimations分析
    使用:https://github.com/android-cn/android-open-project-demo/tree/master/listview-animations-demo APK例子:https://github.com/android-cn/android-open-proje...
  • Android MMS 源码流程
    概述MMS的收发操作借助于手机的短信机制,实际收发过程需要网络的APN支持,使用特定的APN接入点实现MMS数据的真实发送和接收;源码流...
  • [原]Android开发技巧--ListView
    1.ListView中元素的排序ListView中的元素排序,即将数据源排序即可;给集合排序的方法:调用Collections的sort(list,Comparator)方法,该方法需要2个参...
  • Android ListView和ScrollBar相关
    Android中的View对于ScrollBar和Scroll的支持是非常灵活的,不仅仅是UI样式可变,计算参数的方式也是可变的。在Android中,任何View都可以显示...
  • 快速解决Android平台移植ffmpeg的一些问题_Android
    模仿Android的MediaPlayer类实现了ffmpeg的播放接口,如setDataSource(),setDisplay(),start(), stop(),pause()等,缺点是没有实现seek功能...
  • 几种tabhost的总结(2)
    底背景图标动画切换 一。布局 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_...
  • Android应用开发之(你必须知道的ListView方法)
    Android应用开发之(你必须知道的ListView方法) 1.更新ListView中的数据,通过调用BaseAdapter对象的notifyDataSetChanged()方法: mAdapter.notifyDataSetCha...
  • 支持HTML5 SqlLite的AndroidApp
    简介: 想要建立一个支持HTML5的AndroidApp; 这个HTML5的程序需要使用本地存储,特别是sqllite; 用eclipse创建了一个app,这个app默认在res/layout建...