ActionBar初试 menu item转换为action item及常用功能的激活

1. 添加ActionBar
Action Bar包括在所有Activity中使用的Theme.Holo主题, Android 3.0或更高版本上时,系统为每个Activity应用默认使用Theme.Holo主题

2. 不适用ActionBar

方法1. 

<activity android:theme="@android:style/Theme.Holo.NoActionBar">

方法2. 
ActionBar actionBar = getActionBar();
actionBar.hide();

3. 如果你的应用程序里会频繁的显示和隐藏ActionBar时, 建议将Activity主题中将android:windowActionBarOverlay属性值设置为true,不然show ActionBar或者hide ActionBar的时候Activity会重新调整布局、

4. 如果把android:windowActionBar样式属性设置为false,那么getActionBar()方法将返回null

5. 添加Action item
可以把menu item作为Action item
先看看默认menu的显示
例子,显示效果是menu作为ActionBar的action overflow显示(一个三个竖点的按钮,点击会弹出菜单):
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wind.actionbar"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.wind.actionbar.HelloActionBarActivity"
            android:label="@string/app_name">
            <!-- android:uiOptions="splitActionBarWhenNarrow" will display below -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

src/com/wind/actionbar/HelloActionBarActivity.java
package com.wind.actionbar;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class HelloActionBarActivity extends Activity {
    private static final String TAG = "HelloActionBarActivity";
    //private ActionBar actionBar;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v(TAG, "onCreate");
        setContentView(R.layout.main);
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		this.getMenuInflater().inflate(R.menu.menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

}

res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/item1"
        android:title="111" 
        android:icon="@drawable/ic_launcher">
    </item>
    <item android:id="@+id/item2"
        android:title="222"        
        android:icon="@drawable/ic_launcher">
    </item>    

    <item android:id="@+id/item3"
        android:title="333" 
        android:icon="@drawable/ic_launcher">
    </item>
    
    <item android:id="@+id/item4"
        android:title="444" 
        android:icon="@drawable/ic_launcher">
    </item>
</menu>

想把menu item转化为action item,只需要修改/res/menu/menu.xml,顺便排个序:android:orderInCategory的值越小,排序越靠前
/res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/item1"
        android:title="111" 
        android:icon="@drawable/ic_launcher"
        android:showAsAction="ifRoom|withText"
		android:orderInCategory="1">
    </item>
    <item android:id="@+id/item2"
        android:title="222"        
        android:icon="@drawable/ic_launcher"
        android:showAsAction="ifRoom|withText"
		android:orderInCategory="2">
    </item>    

    <item android:id="@+id/item3"
        android:title="333" 
        android:icon="@drawable/ic_launcher"
        android:showAsAction="ifRoom|withText"
		android:orderInCategory="3">
    </item>
    
    <item android:id="@+id/item4"
        android:title="444" 
        android:icon="@drawable/ic_launcher"
        android:showAsAction="ifRoom|withText"
		android:orderInCategory="0">
    </item>
</menu>

6. 响应action item的点击事件
src/com/wind/actionbar/HelloActionBarActivity.java
package com.wind.actionbar;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class HelloActionBarActivity extends Activity {
    private static final String TAG = "HelloActionBarActivity";
    //private ActionBar actionBar;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v(TAG, "onCreate");
        setContentView(R.layout.main);
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		this.getMenuInflater().inflate(R.menu.menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {	//响应menu item或者action item的点击
		Log.v(TAG, "onOptionsItemSelected");
        switch(item.getItemId()){
        case R.id.item1:
            Log.v(TAG, "item1 pressed");
            break;
        case R.id.item2:
            Log.v(TAG, "item2 pressed");
            break;
        default:
            Log.v(TAG, "default");   
        }
        return super.onOptionsItemSelected(item);
	}
}

7. Android4.0之后增加了分割actionbar的属性:

android:uiOptions="splitActionBarWhenNarrow

在application或者Activity里添加这个属性,则会使Action item显示在屏幕的底部

8. 使用应用程序图标来导航

如果你要使用应用图标来导航,要注意从Android4.0(API 级别 14)开始,必须通过调用setHomeButtonEnabled(true)方法来激活

ActionBar actionBar = this.getActionBar();
actionBar.setHomeButtonEnabled(true);

然后在它的选中事件里实现想要实现的功能
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	        case android.R.id.home:
	            // 在action bar点击app icon;
	            //TODO click event implement
	            return true;
	            ...
	     }
     }

9. 隐藏ActionBar的app图标和Title
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayShowHomeEnabled(false);	//不显示app图标
actionBar.setDisplayShowTitleEnabled(false);	//不显示Title

等价于:

ActionBar actionBar = this.getActionBar();
actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_TITLE ); 

10. 使用应用程序向上导航
ActionBar actionBar = this.getActionBar();
actionBar.SetDisplayHomeAsUpEnabledtrue(true); //来激活应用程序向上导航功能

例子:src/com/wind/actionbar/B_Activity.java
package com.wind.actionbar;

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;

public class B_Activity extends Activity{
	private static final String TAG = "B_Activity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.title);
		ActionBar actionBar = getActionBar();
	    actionBar.setDisplayHomeAsUpEnabled(true);	//激活应用程序向上导航
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Log.v(TAG, "onOptionsItemSelected");
		switch (item.getItemId()) {
		case android.R.id.home:
			Log.v(TAG, "app icon is pressed");
			finish();
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}
}	


你可能感兴趣的:(ActionBar初试 menu item转换为action item及常用功能的激活)