(一)开始____2、添加操作栏-Adding the Action Bar——添加操作按钮-Adding Action Buttons

目录

 [隐藏

添加操作按钮

操作栏允许你为当前环境中最重要的操作项目添加按钮。那些图标或者文字直接出现在操作栏中的被称为操作按钮。无法容纳在操作栏中或者不够重要的按钮都隐藏在操作溢出。


actionbar-actions.png

 

在XML中指定操作

所有的操作按钮和操作溢出里的其他可用项目是在XML菜单资源里定义的。为了在操作栏中添加操作,需要在项目的 res/menu/目录下创建新的XML文件。
为你需要的每个项目在操作栏添加 <item>元素。例如:
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>
这就声明当操作栏空间可用时,搜索操作会作为操作按钮来显示,但是搜索操作总会在溢流中出现(默认情况下,所有操作会在溢出中出现,但明确宣告对每个操作的设计意图会更好)。
图标属性需要图像的资源ID。@后面绘制的名称必须是已经保存在项目res/drawable/ 目录中的位图图像名称。例如"@drawable/ic_action_search是指 ic_action_search.png。同样,title属性使用由项目res/values/目录下的XML文件定义的字符串资源.
如果应用程序使用可以与安卓2.1版本兼容的支持库,那么showAsActionattribute在namespace不可用。你必须定义自己的XML命名空间并且使用该命名空间的属性前缀。(自定义XML命名空间应根据应用程序名称来确定,可以取任何你想要的名字并且仅在声明文件范围内才能访问)。例如:
res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom"  />
    ...
</menu>

在操作栏添加操作

把菜单项放入操作栏,在活动中实行 onCreateOptionsMenu()回调方法以便把菜单资源传递给指定对象。例如:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

响应操作按钮

当用户按下操作按钮之一或者操作溢出的另一项目时,系统会调用活动 onOptionsItemSelected()回调方式。实现此方法时需要调用给定菜单项的getItemId(),以便于确定按下哪些项目——返回的ID与在对应的 <item>元素android:id属性中的声明值匹配。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_settings:
            openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

为低级活动添加向上按钮

并非应用程序主要入口的所有界面(活动不属于“home”界面)应该向用户提供导航到应用程序层次结构中的逻辑父类屏幕,按下操作栏的向上按钮即可实行这一操作。
在Android4.1(API级别16)或者更高级别运行时,或者在支持库使用ActionBarActivity时,进行向上导航只需要在清单文件中声明父类活动,并且启用操作栏中的向上按钮。
例如,如下面所述你可以在清单中声明一个活动的父类:
<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>
接着通过调用 setDisplayHomeAsUpEnabled()来把应用程序图标显示为向上按钮。
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);
 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // If your minSdkVersion is 11 or higher, instead use:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}
由于系统知道 MainActivity是 DisplayMessageActivity的父类活动,当用户按下向上按钮时,系统会导航到适当的父类活动——不必处理向上按钮相关事情。
如需了解向上导航的更多信息,请参阅提供向上导航。
posted @ 2014-07-28 15:56  ╰→劉じ尛鶴  阅读(112)  评论(0)    收藏  举报