Android 扩展用户体验-ActionBar

ActionBar以前已经介绍了一些,是在Android 3.0(API 11)引入的,你可以认为是一个导航条,代替了原来Activtiy的标题栏。

ActionBar提供一个一致的框架,品牌化,导航,还有供操作的action。

使用条件:targeSDK(或minSDK)版本>=11, activity theme需要设置为Theme.Holo 或者它的子Style 。默认是Theme.Holo 。

若要使用ActionBar的API,则minSDK必须>=11。   注意:ActionBar的API可不包含在Support Library。可惜哦。

ActionBar的隐藏和显示方法: 

?


1

2

3

4

5

ActionBar
actionBar = getActionBar();

//
Hide the Action Bar

actionBar.hide();

//
Show the Action Bar

actionBar.show();

你还可以设置activity的Theme为:Theme.Holo.NoActionBar。

?


1

2

3

<activity

  android:name=”.MyNonActionBarActivity”

  android:theme=”@android:style/Theme.Holo.NoActionBar”>

你还可以自定义主题,然后移除ActionBar,通过设置android:windowActionBar为false。

?


1

2

3

4

5

6

<?xml

version=”1.0” encoding=”utf-8”?>

<resources>

  <style

name=”NoActionBar” parent=”@style/ActivityTheme”>

    <item

name=”android:windowActionBar”>false</
item>

  </style>

</resources>

前面无论哪种方式,一旦你移除了ActionBar,那么你不能在程序中获取了:getActionBar会返回Null。

自定义ActionBar

1.修改图标

默认的,ActionBar使用Activity的android:icon属性,还有一致的android:label属性。

你还有种方式,就是使用android:logo属性。不像方方正正的icon,logo的图像不会有任何宽度限制。

logo图像典型的给你的APP提供品牌。比较好的方式:当你有Logo的时候,你可以隐藏label。

如何在程序中隐藏标签label呢?

答:ActionBar actionBar = getActionBar(); 
actionBar.setDisplayShowTitleEnabled(false);

当你的Activity既指定了android:icon还指定了android:logo,那该如何呢?

答:经测试,logo会覆盖在icon之上。程序中你可以 actionBar.setDisplayUseLogoEnabled(displayLogo)。

如果你2个都看着不爽怎么办?

答:程序中:actionBar.setDisplayShowHomeEnabled(false);  这样icon和logo都没了。

注意:APP的icon/logo典型的被用来作为一个快捷的导航方式到main activity,通常你至少得保留一个。

如何修改logo旁的标题呢?

答:使用setTitle和setSubTitle。一个主标题,一个子标题。

actionBar.setSubtitle(“Inbox”); 
actionBar.setTitle(“Label:important”);

 

自定义背景

默认的ActionBar的背景颜色取决于activity指定的Theme。Holo Theme它的背景是黑色的。

你可以指定任意的Drawabel对象作为背景,使用setBackgroundDrawable方法:

?


1

2

3

4

ActionBar
actionBar = getActionBar();

Resources
r = getResources();

Drawable
myDrawable = r.getDrawable(R.drawable.gradient_header);

actionBar.setBackgroundDrawable(myDrawable);

ActionBar会自动缩放你的背景图,所以通常好的方式,你的背景图最好是.9图。

覆盖模式

默认情况下,actionBar放在你的activity的顶部,且作为activity布局的一部分。设置成为覆盖模式后,actionBar相当于漂浮在activity之上,不干预activity的布局。

如何设置呢?

答:

?


1

2

3

4

5

6

7

8

@Override

public

void

onCreate(Bundle savedInstanceState) { 

   super.onCreate(savedInstanceState);

 

   getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

 

   setContentView(R.layout.main);

}

Splite ActionBar模式

这个模式就是,你顶部放不下的action,我帮忙放在底部。

如何设置成Spite模式呢?

答: 

?


1

2

3

4

5

<activity

   android:label=”My
Activity”

   android:name=”.ActionBarActivity”

   android:logo=”@drawable/ic_launcher”

   android:uiOptions=”splitActionBarWhenNarrow”>

自定义ActionBar去控制APP导航行为

Android提供了一系列方法,总的来说分为2类:

1.App icons 使用icon或者logo导航,典型的导航到APP的主界面。你也可以配置Icon去代表移动到上一级的意思。

2.Tabs和下拉列表 ActionBar支持内嵌的Tabs和下拉列表。

Icon导航可以用来导航Activity栈,然而Tabs和下拉列表被用来作为Activity内Fragments的转换。

配置ActionBar的Icon导航行为

在大多数情况,APP的icon应该被作为快捷方式,导航到主Activtiy,典型的说也就是Activtiy栈的根。为了使你的APP icon可以被点击,你必须调用ActionBar的setHomeButtonEnabled方法。

点击icon会被系统作为一个特殊的Menu Item的点击。所以你就可以在onOptionsItemSelected方法中去监听,它的id为android.R.id.home。

例子:

?


1

2

3

4

5

6

7

8

9

10

11

12

@Override

public

boolean

onOptionsItemSelected(MenuItem item) {

  switch

(item.getItemId()) {

     case

(android.R.id.home) :

       Intent
intent =
new

Intent(
this,
ActionBarActivity.
class);

       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

       startActivity(intent);

       return

true
;

     default:

       return

super
.onOptionsItemSelected(item);

  }

}

支持向上导航

传统的,Android APP在activity之间跳转完之后,可以使用返回按钮回退。

为了也支持这种模式,你可以配置app icon去提供“向上”导航。 
actionBar.setDisplayUseLogoEnabled(false); 
actionBar.setDisplayHomeAsUpEnabled(true); 
当向上导航的时候,通常使用icon而不是logo,所以这里setDisplayUseLogoEnabled(false)。

不得不说的一点:向上导航在样子上就多了个箭头,跟setHomeButtonEnabled本质上相同,都会被作为特殊的MenuItem,id都是android.R.id.home,也同样都需要在onOptionsItemSelected去监听,然后跳转。

具体怎么用,仁者见仁,智者见智。

使用导航Tabs

ActionBar提供导航TAB和下拉列表。值得注意的是,一次只能激活其中的一种导航。这些导航选择项被设计用来与Fragments更亲近。通过替换可见的Fragments从而达到修改Activity内容的目的。

导航TAB是TabWidget的替代品。

如何配置TABS呢? 答:调用setNavigationMode方法,指定ActionBar.NAVIGATION_MODE_TABS。

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
actionBar.setDisplayShowTitleEnabled(false);

通常使用TAB也会去隐藏标题。

使用Tab例子:

?


1

2

3

4

5

6

7

8

9

10

Tab
tabOne = actionBar.newTab();

 

tabOne.setText(“First
Tab”)

       .setIcon(R.drawable.ic_launcher)

       .setContentDescription(“Tab
the First”)

       .setTabListener(

           new

TabListener<MyFragment>

              (this,
R.id.fragmentContainer, MyFragment.
class));

 

actionBar.addTab(tabOne);

此外,你还可以使用setCustomView方法,自定义Tab布局,代替标准的文字+图片模式。

注意:setContentDescription方法是在Android 4.0(API 14)引入的,用来提供更细节的描述。

Tab的转换是由TabListener来操控的,当tab被选择、未选择、重新选择时,允许你创建Fragment事务作为回应。

下面看例子:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

public

static

class

TabListener<T
extends

Fragment>

  implements

ActionBar.TabListener {

 

   private

MyFragment fragment;

   private

Activity activity;

   private

Class<T> fragmentClass;

 

   private

int

fragmentContainer;

 

   public

TabListener(Activity activity,
int

fragmentContainer,

                                     Class<T>
fragmentClass) {

 

        this.activity
= activity; 

        this.fragmentContainer
= fragmentContainer; 

        this.fragmentClass
= fragmentClass; 

    }

 

   //
Called when a new tab has been selected 

   public

void

onTabSelected(Tab tab, FragmentTransaction ft) { 

     if

(fragment ==
null)

        String
fragmentName = fragmentClass.getName(); 

         fragment

           (MyFragment)Fragment.instantiate(activity,
fragmentName); 

        ft.add(fragmentContainer,
fragment,
null); 

        fragment.setFragmentText(tab.getText()); 

    }
else

         ft.attach(fragment); 

    }

  }

 

//
Called on the currently selected tab when a different tag is

//
selected.

public

void

onTabUnselected(Tab tab, FragmentTransaction ft) {

     if

(fragment !=
null)

       ft.detach(fragment); 

     

}

 

    //
Called when the selected tab is selected. 

   public

void

onTabReselected(Tab tab, FragmentTransaction ft) { 

       //
TODO React to a selected tab being selected again. 

    }

}

使用下拉列表导航

如何去配置呢?答:actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)。

这里的下拉列表就像一个Spinner。数据源+Adapter+…..很简单! 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//
Select the drop-down navigation mode.

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

 

//
Create a new Spinner Adapter that contains the values to

//
be displayed in the drop down.

ArrayAdapter
dropDownAdapter =

  ArrayAdapter.createFromResource(this,

                                         R.array.my_dropdown_values,

                                         android.R.layout.simple_list_item_1);

 

//
Assign the callbacks to handle drop-down selections.

actionBar.setListNavigationCallbacks(dropDownAdapter,

  new

OnNavigationListener() {

    public

boolean

onNavigationItemSelected(
int

itemPosition,

                                                     long

itemId) {

    //
TODO Modify your UI based on the position

    //
of the drop down item selected.

    return

true
;

  }

});

使用自定义的自定义的导航View

Android允许你创建自己的导航View:

actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setCustomView(R.layout.my_custom_navigation);

时间: 2025-01-13 11:13:56

Android 扩展用户体验-ActionBar的相关文章

六个细节改变提升 Android L 用户体验

导语:美国科技博客Android Authority近期刊文称,谷歌在I/O开发者大会上发布了新版Android L系统,并公布了这一系统的新特性,包括对通知的重新设计.菜单的调整,以及Android for Work等.但实际上,在试用开发者预览版之后,可以发现这一系统的一些细节调整同样带来了很大改进,能明显提升用户的使用体验. 以下是6点此类改进: 1.Android L可以预估电池充电时间 在手机连接电源之后,Android系统将在后台计算手机充满电需要花费多长时间.你将可以在锁屏屏幕上看

手机屏幕尺寸扩展是如何影响用户体验设计的

  造型千奇百怪的小屏手机叱咤风云的时代已经一去不复返了.事实上,近几年的行业趋势表明大屏手机,或者说巨屏手机,将会在很长的时间内占据主流.而现在,也是时候总结一下过去几年里,面对大屏手机时,设计师的失职. 如何界定大屏手机? 其实简单称之为大屏也不是特别准确,它的英文名称更为形象:Phone+Tablet=Phablet ,也就是说,它是传统手机和平板的结合体,Phablet. 因此,这些大屏手机实际上是超过我们手掌习惯的.可掌控的尺寸,但是又没有达到平板的级别.更准确的说,是屏幕尺寸在5~6

设计成功的Android平板电脑的用户体验设计

文章描述:Android 平板电脑设计. 没有什么时候比现在更需要设计师去为各种各样的移动设备营造体验了.随着平板电脑被不断接受,我们已经步入"后PC时代",公司会利用平板电脑的用户体验质量来争夺用户的注意力.设计成功的Android平板电脑应用程序,不但需要一个很棒的概念来鼓励用户下载.使用和保留,还需要一种使 Android用户很直观的发现并适应使用环境的用户体验. 接下来通过了解ipad iOS用户界面与Android 3.x "Honeycomb 用户界面 设计规范和

保证Android应用拥有良好用户体验的三要素

文章描述:用户体验导向的Android应用开发. 文 / 陈彧堃 本文指出"流畅的环境"."友好的体验"和"节省电量"是保证Android应用拥有良好用户体验的三要素. Android开发目前是移动开发中的"当红炸子鸡",大量Java程序员涌向Android,同时会习惯性地将桌面和Web端的开发/设计经验带到移动设备上.这样的好处是充分利用了移动开发和桌面/Web服务的共性,比如广泛使用的列表.本地数据库等常用组件:坏处是移动

用户体验及产品层定位的差异:Android和iPhone

文章描述:Android与Iphone的体验差异. 2007年中苹果发布iphone,2007年末谷歌发布Android系统.在今年已经超过Iphone成为美国的头号智能手机系统!从产品开发而言,苹果mac平台加授权开发模式阻挡了一部分人群:而java的安卓系统且用xml方式构建widget,很方便的开发出应用也是其优势,毕竟众人拾柴火焰高,也就铸就了安卓应用市场的繁华.对用户使用层面而言,苹果的产品构建无疑高出一筹,也较好的匹配了其价格,尽管HTC已经和谷歌密切合作,但他们的产品在整体体验方面

iOS 6,iOS 7,Android和Windows Phone 8用户体验对比

技术顾问公司Pfeiffer进行了一次移动操作系统用户体验研究,这次研究被设计来收集和对比苹果iOS 6,全新设计的iOS 7,微软的Windows Phone 8,三星智能手机使用的Android系统和黑莓10系统之间可以量化的用户体验. 根据Pfeiffer,测试方法尝试尽可能多的消除各种主观因素,比如说品牌忠诚度和个人感觉.测试中尝试只对比那些影响普通非技术用户日常生活的体验.Pfeiffer得出了四个关键点:操作系统的认知负荷,效率和整合,自定义选项和用户体验摩擦. 认知负荷是一种心理概

用户体验导向的Android应用开发

文 / 陈彧堃 本文指出"流畅的环境"."友好的体验"和"节省电量"是保证Android应用拥有良好用户体验的三要素. Android开发目前是移动开发中的"当红炸子鸡",大量Java程序员涌向Android,同时会习惯性地将桌面和Web端的开发/设计经验带到移动设备上.这样的好处是充分利用了移动开发和桌面/Web服务的共性,比如广泛使用的列表.本地数据库等常用组件;坏处是移动和桌面/Web的使用场景和载体完全不同,直接移植桌

从开发者角度看国内Android Market的用户体验

开发者角度看国内Android Market的用户体验-小程序 体验者 开发者"> 编者按:本文作者为丁香园CTO,贝塔咖啡联合创始人,冯大辉 近一段时间在发布 丁香园用药助手 Android 版的过程中把国内几个重要的 Android Market 用了个遍,每次要发布新版本的时候都要感慨一下:几乎所有的 Android Market 后台的用户体验都不怎么好. 信息各有一 国内所有的 Android Market 和 Google 官方 Android Market 都是不"

ios-能不能推荐一些用户体验做的比较好的iOS/Android应用?

问题描述 能不能推荐一些用户体验做的比较好的iOS/Android应用? 最近在做一个iOS的项目,是给员工在营业部为客户服务的时候使用的,所以需要有一些用户指导(user education),员工和客户都会看到界面,所以界面设计和用户体验(user experience)也比较重要.但是现在总感觉界面和用户体验不太满意,他们出了一个主意,让每个人介绍一个UI/UX做的比较好的app,最好是iPAD上用的.我平时不太用app,大家能不能帮我推荐一些,我可以先使用和学习一下? 解决方案 感觉现在