安卓UI设计与开发教程 底部菜单栏(一)使用TabActivity实现底部菜单栏

从这一篇文章开始,我们将进入到一个应用程序主界面UI的开发和设计中了,底部菜单栏在Android的应用 开发当中占有非常重要的地位。几乎所有的手机应用程序都有底部菜单栏这样的控件,主要是因为手机的屏幕 大小有限,这样一种底部菜单栏实现起来的效果可以很方便的为用户切换自己所需要的界面,具有更强的交互 性。底部菜单栏的样式和效果也是五花八门,多的数不胜数,但是实现的基本原理都是一样的。

这个 专题的几篇文章将更加详细的介绍几种大家比较常见的和效果比较炫的实例来进行讲解。话不多说,进入正题 。

一、TabActivity之感叹

1、TabActivity的现状

打开Google的API文档搜索 TabActivity,在介绍这个类时会发现有这么一句话,

大概的意思 是说:这个类已经在Android4.0的系统中被弃用了,新的应用程序应该使用Fragment来代替该类的开发大家可 以查看:Google开发文档

2、TabActivity是否还有存在的必要性

其实谷歌有此举动,我们也应 该早就想到了,为什么会这么说呢?那就要从TabActivity的原理开始说起了。

做个假定先: 比如我 们最外面的Activity是MainActivity, 第一个tab是FirstActivty, 第二个tab是SecondActivity。

相 信大家都用过TabActivity, 它是一个特殊的Activity,它特殊的地方在哪里?有以下几点为证:    

<1> 它看起来违反了Activity的单一窗口的原则。因为它可以同时加载几个activity, 当用户点击它上面的tab时,就会跳到相应的Activity上面去。

<2> 用户首先进去 FirstActivity,然后进去SecondActivity,再点击返回键的时候。它返回的界面不是FirstActivity,而是退出 我们的应用程序。

<3> 当用户在FirstActivity按返回键的时候,如果MainActivity和 FirstActivity通过重写onKeyDown()方法,那么收到事件回调的只有FirstActivity。

3、谷歌当时的 困扰

<1> 首先我们要明白一点,android系统是单窗口系统,不像windows是多窗口的(比如在 windows系统上,我们可以一边聊QQ,一边斗地主等等)。也就是说,在一个时刻,android里面只有一个 activity可以显示给用户。这样就大大降低了操作系统设计的复杂性(包括事件派发等等)。

<2> 但是像TabActivity那种效果又非常必要,用户体验也比较好。所以我觉得当时google开发人员肯定很纠结,于 是,一个畸形的想法产生了,就是在单窗口系统下加载多个activity,它就是TabActivity。

4、 TabActivity实现加载多个Activity原理

我们都知道,想启动一个Activity,一般是调用 startActivty(Intent i)方法,然后这个方法会辗转调用到ams(ActivityManagerService)来启动目标 activity,所以,TabActivity实现的要点有两个:

<1> 找到一个入口,这个入口可以访问到 ActivityThread类(这个类是隐藏的,应用程序是访问不到的),然后调用ActivityThread里面的启动activity 方法

<2> 绕开ams,就是我们TabActivity加载的FirstActivity和SecondActivity是不能让ams 知道的。

所以,一个新的类诞生了 ---- LocalActivityManager , 它的作用如下:

<1> 这个类和ActivityThread处于一个包内,所以它有访问ActivityThread的权限。

<2> 这个类提供了类似Ams管理Activity的方法,比如调用activity的onCreate方法,onResume()等等 ,维护了activity生命周期。

也正如其名字一样,它是本地的activity管理。就是说它运行的进程和它管 理的Activity是在一个进程里面。所以,当TabActivity要启动一个activity的时候,会调用到 LocalActivityManager的创建activity方法,然后调用ActivityThread.startActivityNow(),这个方法绕过 了ams,就是说ams此时根本不知道LocalActivityManager已经在暗渡陈仓的启动了一个activity(所以ams的 task列表里面没有新启动activity的记录,所以用户按back键就直接退出我们的应用)。然后和正常启动 activity一样,初始化activity,在初始化activity的时候,有个方法非常重要:activity.attch()

final void attach(...){
....
mWindow.setCallback(this);
.....
}

mWindow.setCallback(this)这个方法非常重要,它设置了window的回调接口,这是我们activity 能够接受到key事件的关键所在!因为在DecorView在接受到事件的时候,会回调这个接口,如:

final Callback cb = getCallback();
final boolean handled = cb != null && mFeatureId < 0 ? cb.dispatchKeyEvent(event) : 

super.dispatchKeyEvent(event);

当我们启动FirstActivity的时候,我们设置FirstActivity为 PhoneWindow的回调实现,所以,按back键的时候,调用的是FirstActivity的onKeyDown方法。

5、 TabActivity小结

从以上的种种分析来看,TabActivity只是一个怪胎而已。所以,在后面的发展中肯 定会被代替,只是没想到会被替代的这么快。不经让我有了一种英雄暮路,美人辞暮的感觉,至少 TabActivity曾经在Android2.2/2.3版本那么显赫一时,不过终究还是逃不过被谷歌遗弃的命运。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索安卓 fragment
, activity
, 方法
, 安卓 activity
, tabactivity
, 底部菜单栏
, localactivitymanager
, activity引用安卓手机
, 一个
, android底部菜单
, 底部菜单
, 底部菜单实现
, android底部菜单栏
退出多个activity
android底部菜单栏、微信公众号底部菜单栏、html5 手机底部菜单栏、安卓底部菜单栏、苹果底部菜单栏设置,以便于您获取更多的相关知识。

时间: 2024-09-16 23:59:05

安卓UI设计与开发教程 底部菜单栏(一)使用TabActivity实现底部菜单栏的相关文章

安卓UI设计与开发教程 底部菜单栏(四)

Fragment+PopupWindow仿QQ空间最新版底部菜单栏 在今天的这篇文章当中,我依然会以实战加理论结合的方式教大家如何设计出自己觉得很炫的UI界面.好的,话不多说,进入正题.今天的这篇文章主要是以仿QQ空间的底部菜单栏效果为主,实现的效果有: <1>实现了点击按钮时的切换图片效果: <2>实现了点击按钮时的切换界面效果: <3>实现了点击中间圆形按钮时弹出菜单以及按钮图片切换效果: <4>实现了点击空白处和返回键按钮来关闭弹出菜单. 有个地方需要

安卓UI设计与开发教程 底部菜单栏(二)Fragment的详细介绍和使用方法

由于TabActivity在Android4.0以后已经被完全弃用,那么我就不再浪费口水继续讲解它了,取而代之的是 Fragment.Fragment是Android3.0新增的概念,Fragment翻译成中文是碎片的意思,不过却和Activity十分的 相似,这一篇我花大量的篇幅来详细的讲解Fragment的介绍和使用方法. 一.Fragment的基础知识介 绍 1.1概述 1.1.1 特性 Fragment是activity的界面中的一部分或一种行为.可以把多个 Fragment组合到一个a

安卓UI设计与开发教程 顶部标题栏(六)实现悬浮式顶部和底部标题栏效果

这篇文章是实现了百度贴吧一个老版本的悬浮式顶部和底部的标题栏效果,觉得还挺有意思的就想跟大家 一起分享一下,也算是对前面学过的UI设计知识的一个总结吧.好的,话不多说,请大家先看效果图. 一.实现效果图 开发教程 顶部标题栏(六)实现悬浮式顶部和底部标题栏效果-html悬浮顶部底部按钮">

安卓UI设计与开发教程 滑动菜单栏(三)SlidingMenu动画效果的实现

经过上一篇文章的学习,相信大家对开源项目SlidingMenu的用法已经有了一个非常深入的了解,那么这一 章博主就来教大家滑动菜单栏滑动时动画效果的实现.博主这里用了三个不同动画效果的基础示例来教大家如 何去实现,等大家弄懂了之后完全可以做到举一反三,去实现更多不同的动画效果,让你的应用软件给用户带 来眼前一亮的效果. 一.SlidingMenu动画效果示例一 1.示例一效果图 该示例实现了 滑动时缩放的效果,看左边的效果图可以明显的感觉到,滑动菜单栏刚刚打开时的图片比右边的效果图滑动菜 单栏打

安卓UI设计与开发教程 滑动菜单栏(二)开源项目SlidingMenu的示例

通过上一篇文章的讲解,相信大家对于开源项目SlidingMenu都有了一个比较初步的了解(不了解的可以参 考上一篇文章),那么从这一章开始,博主将会以SlidingMenu为重心,给大家带来非常丰富的示例演示,让 大家对SlidingMenu有一个更加深入的了解以及如何去实现一些比较炫的滑动效果. 这篇文章会给大家 带来7个不同效果的示例,每个示例都包含了最基本的使用方法,从易到难,循序渐进.能够让初学者可以快 速的掌握SlidingMenu的使用方法.下一篇文章会给大家带来三种不同的动画效果来

安卓UI设计与开发教程 滑动菜单栏(一)开源项目SlidingMenu的使用

由于最近的工作确实比较忙的原因,所以这个系列的教程有一段时间没有更新了,也请各位读者见谅. 这期博主要给大家带来的是关于滑动菜单栏的实现效果. 一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了这种界面方案,像facebook.人人网.everynote.Google+等等.如下图所示: Google+界面效果图 开发教程 滑动菜单栏(一)开源项目

安卓UI设计与开发教程 顶部标题栏(一)ActionBar详细概述和简单示例

一.ActionBar介绍 在Android 3.0中 除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和menu,在程序运行中一直置于顶部,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计 可以展示更多丰富的内容,方便操控. 二.ActionBar的功能 用图的方式来讲解它的功能 开发教程 顶部标题栏(一)ActionBar详细概述和简单示例-actionbar隐藏标题栏"&g

安卓UI设计与开发教程 顶部标题栏(三)ActionBar实现层级导航的返回效果

今天我们继续来讲解ActionBar的使用,不清楚这个类的读者可以翻阅博主前几篇的文章或者在网络上查阅 相关的资料,关于这个类讲解的文章还是很多的,功能确实也很强大.好的,话不多说,让我们赶快进入正题 吧. 一.使用应用图标实现层级导航 在默认的情况下,应用程序图标显示在操作栏的左边.你 能够把这个图标当做操作项来使用,应用程序可以在这个图标上响应以下两个操作其中之一: <1> 返回应用程序的"主"Activity: <2> 向应用程序上级页面导航. 开发教程

安卓UI设计与开发教程 顶部标题栏(二)

ActionBar实现Tab选项卡和下拉导航列 在上一篇文章中,我们只是大概的了解了一下关于ActionBar这个类的简单用法,今天我会继续以实例进行 更加深入的讲解. 一.实现Tab选项标签 当你想要在一个Activity中提供Tab选项卡时,使用 ActionBar的Tab选项标签是一个非常好的选择(而不是使用TabWidget类),因为系统会调整ActionBar的选项 标签来适应不同尺寸的屏幕的需要,比如在屏幕足够宽的时候,Tab选项标签会被放到主操作栏中:当屏幕太 窄的时候,Tab选项