您的位置:首页 > 其它

actionbar以及制定

2016-06-09 10:42 477 查看
 


Android ActionBar的基本用法

标签: Android控件
2014-06-06 15:44 58295人阅读 评论(7) 收藏 举报


 分类:
 

Android UI(16) 


本文翻译了这篇文章:Using the Android action bar (ActionBar) - Tutorial


1、ActionBar的简介

ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。

ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com
或使用Support Library v7。

下面是一张使用ActionBar的界面截图:





其中,[1]是ActionBar的图标,[2]是两个action按钮,[3]是overflow按钮

2、使用ActionBar

开发API11以下的程序,首先必须在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类,否则将无法使用ActionBar。

2.1 创建Actions

Actions即ActionBar中的每个交互项,可以在代码中创建Action,也可以在XML文件中指定(位于res/menu)。在menu资源文件中定义Action的方法如下:

[java] view
plain copy

 





<menu xmlns:android="http://schemas.android.com/apk/res/android" >  

    <item  

        android:id="@+id/action_refresh"  

        android:orderInCategory="100"  

        android:showAsAction="always"  

        android:icon="@drawable/ic_action_refresh"  

        android:title="Refresh"/>  

    <item  

        android:id="@+id/action_settings"  

        android:title="Settings">  

    </item>  

</menu>   

showAsAction属性用来定义每个Action是如何显示的,always表示

永远显示在ActionBar中,如果屏幕空间不够则无法显示,ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中,never则表示永远显示在overflow中。

在Activity中创建ctionBar的Action代码位于onCreateOptionsMenu()中,下面一段代码展示了创建过程:

[java] view
plain copy

 





@Override  

  public boolean onCreateOptionsMenu(Menu menu) {  

    MenuInflater inflater = getMenuInflater();  

    inflater.inflate(R.menu.mainmenu, menu);  

    return true;  

  }   

2.2 Action的按钮交互

如果一个Action被单击,对于activity中的onOptionsItemSelected()将被调用。该函数的传入参数是一个MenuItem。通过判断该MenuItem的Id,即可确认是哪个Action被单击。下面代码展示了该函数的使用过程。

[java] view
plain copy

 





Override  

  public boolean onOptionsItemSelected(MenuItem item) {  

    switch (item.getItemId()) {  

    // action with ID action_refresh was selected  

    case R.id.action_refresh:  

      Toast.makeText(this, "Refresh selected", Toast.LENGTH_SHORT)  

          .show();  

      break;  

    // action with ID action_settings was selected  

    case R.id.action_settings:  

      Toast.makeText(this, "Settings selected", Toast.LENG  

          .show();  

      break;  

    default:  

      break;  

    }  

    return true;  

  }   

onCreateOptionsMenu()只会被调用一次。若想改变Menu,可以调用invalidateOptionsMenu(),这会使onCreateOptionsMenu()将会再次被调用。
3. 自定义ActionBar

3.1 改变ActionBar的显示

在运行时显示和隐藏ActionBar的方法如下:

[java] view
plain copy

 





ActionBar actionBar = getActionBar();  

actionBar.hide();  

// more stuff here...  

actionBar.show();   

可以改变显示在程序图标旁边的文字,如下所示:

[java] view
plain copy

 





ActionBar actionBar = getActionBar();  

actionBar.setSubtitle("mytest");  

actionBar.setTitle("vogella.com");   

3.2 隐藏导航按钮

可以使用如下代码隐藏导航按钮。

[java] view
plain copy

 





getWindow().  

  getDecorView().  

  setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);   

3.3 使用全屏模式

对于Android 4.4 (API 19)应用程序可以使用全屏模式,如下面代码所示。

[java] view
plain copy

 





// This method hides the system bars and resize the content  

  private void hideSystemUI() {  

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  

            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar  

            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar  

            // remove the following flag for version < API 19  

            | View.SYSTEM_UI_FLAG_IMMERSIVE);   

  }   

3.4 使用Split action bar

在屏幕很窄时(如在portra模式),使用Split action bar可以将所有的action显示在屏幕底部,这样可以讲更有意义的元素如导航、标题等显示在activity的顶部

启用split action bar可在 AndroidManifest.xml中定义android:uiOptions="SplitActionBarWhenNarrow"
4. 在Fragment中给action bar添加action

在onCreate()中调用 setHasOptionsMenu(true)。Android Framework会调用Fragement中的onCreateOptionsMenu()来向Activity的Menu中添加item。

5. 动态设置action bar

5.1. 自定义action bar中显示的View

可以往action bar中添加自定义的View,如button或text。

可以使用ActionView的setCustomView,然后使用setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM)来Enable自定义View。

例子:先定义一个包含了EditText的布局文件。

[java] view
plain copy

 





<?xml version="1.0" encoding="utf-8"?>  

<EditText xmlns:android="http://schemas.android.com/apk/res/android"  

    android:id="@+id/searchfield"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent"  

    android:inputType="textFilter" >  

  

</EditText>   

下面的代码将上述布局文件添加到了一个Activity的action bar中。

[html] view
plain copy

 





package com.vogella.android.actionbar.customviews;  

  

import android.app.ActionBar;  

import android.app.Activity;  

import android.os.Bundle;  

import android.view.KeyEvent;  

import android.widget.EditText;  

import android.widget.TextView;  

import android.widget.TextView.OnEditorActionListener;  

import android.widget.Toast;  

  

public class MainActivity extends Activity {  

  

  @Override  

  protected void onCreate(Bundle savedInstanceState) {  

    super.onCreate(savedInstanceState);  

    setContentView(R.layout.activity_main);  

  

    ActionBar actionBar = getActionBar();  

    // add the custom view to the action bar  

    actionBar.setCustomView(R.layout.actionbar_view);  <li style="border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108);
list-s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: