技术开发 频道

明明白白Android平台的Action Bar

  Action Bar有哪些行为?

  最棘手的是运行蜂巢及更高版本的设备显示不同Action Bar功能时,取决于应用程序的目标SDK是设置为蜂巢还是传统的API级别。

  我们来看一个简单的例子,假设我们的应用程序包含四个屏幕:一个主Activity和三个“清洁的”Activity(打扫、擦洗和吸尘),我们向主Activity添加一个选项菜单,以便让用户跳转到另三个Activity,如图2所示。

Action Bar有哪些行为?
▲图 2 带有一个选项菜单和四个屏幕的简单应用程序

  该应用程序两个基本的组件是选项菜单资源文件和主Activity类,其它Activity类只是简单地显示一个ImageView和一个TextView控件,选项菜单资源文件简单定义了选项菜单项,其内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android
=">http://schemas.android.com/apk/res/android">
    
<item
        android:id
="@+id/sweep"
        android:icon
="@drawable/ic_menu_sweep"
        android:title
="@string/sweep"
        android:onClick
="onOptionSweep" />
    
<item
        android:id
="@+id/scrub"
        android:icon
="@drawable/ic_menu_scrub"
        android:title
="@string/scrub"
        android:onClick
="onOptionScrub" />
    
<item
        android:id
="@+id/vacuum"
        android:icon
="@drawable/ic_menu_vac"
        android:title
="@string/vacuum"
        android:onClick
="onOptionVacuum" />
</menu>

  主Activity类将这个菜单资源作为一个选项菜单载入,并定义了每个选项菜单项的onClick处理程序,其内容如下:

package com.mamlambo.actonthis;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class ActOnThisActivity extends Activity {
  
/** Called when the activity is first created. */
   @Override
  
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
   }
   @Override
  
public boolean onCreateOptionsMenu(Menu menu) {
      MenuInflater inflater
= getMenuInflater();
      inflater.inflate(R.menu.cleaningoptions, menu);
      return
true;
   }
      
public void onOptionSweep(MenuItem i)
   {
      startActivity(
new Intent(this, SweepActivity.class));
   }
  
public void onOptionScrub(MenuItem i)
   {
      startActivity(
new Intent(this, ScrubActivity.class));
   }
      
public void onOptionVacuum(MenuItem i)
   {
      startActivity(
new Intent(this, VacuumActivity.class));
   }
   }

  到现在为止我们没有做任何事情,因此我们在技术上并不需要将应用程序的Android清单文件设置为高目标API级别,我们这里将其设置为API级别9。

<uses-sdk android:minSdkVersion="9" />
  

  当我们在蜂巢设备上运行这个“传统的”应用程序时,系统栏会显示一个像网格的图标(第四个),它和传统Android手机上的“菜单”按钮所起的作用是等同的,只不过它变成一个软件按钮了,点击它将会显示选项菜单,就好像是在一部老式智能手机上一样,如图3所示,屏幕顶部的标题栏仅仅显示了应用程序的标题。

Action Bar有哪些行为?
▲图 3 在蜂巢设备上的传统应用程序行为

  如果我们修改应用程序Android清单文件的目标API级别,将其设为API级别11(蜂巢),应用程序将自动应用Action Bar机制。

<uses-sdk android:minSdkVersion="11" />
  

  默认情况下,标题栏显示了应用程序图标,名称和所谓的溢出菜单图标,点击这个图标会弹出一个文本菜单,列出选项菜单项,如图4所示。

Action Bar有哪些行为?
▲图 4 蜂巢设备上的蜂巢应用程序行为

0
相关文章