actionbar 详解教程

actionbar的条件是

1.高于3.0版本的或者 android:targetSdkVersion 属性被设置成11或者更高

2.低于3.0的版本  在libs里面添加以下v7 安装包

1.创建actionbar(方法两种)

a。动态添加

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ActionBar actionBar;
	private Button tabs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		actionBar = getActionBar();
		actionBar.show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		// 添加菜单
		MenuItem add = menu.add(0, 0, 0, "add");
		MenuItem del = menu.add(0, 0, 0, "del");
		MenuItem save = menu.add(0, 0, 0, "save");
		MenuItem save1 = menu.add(0, 0, 0, "save1");
		MenuItem save2 = menu.add(0, 0, 0, "save2");
		MenuItem save3 = menu.add(0, 0, 0, "save3");
		// 绑定到actionbar
		add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
		del.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
		save.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
		save1.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
		save2.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
		save3.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

		return true;
	}
}

SHOW_AS_ACTION_ALWAYS:  总是将该menuitem显示在actionbar上

SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将该ActionView折叠成普通菜单项

SHOW_AS_ACTION_IF_ROOM:当actionbar位置足够时才显示在actionbar上。

SHOW_AS_ACTION_NEVER:不将该menuitem显示在actionbar上。

SHOW_AS_ACTION_WITH_TEXT:把menuItem显示在actionbar上,并且显示该菜单项的文本。



b.静态创建actionbar 在res下创建 menu/menu.xml
package com.wang.android.myactionbar;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ActionBar actionBar;
	private Button tabs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		 
		MenuInflater mi = getMenuInflater();
		mi.inflate(R.menu.menu, menu);
		return true;
	}
}

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:orderInCategory="1"
        android:showAsAction="ifRoom|withText"
        android:title="save"/>
    <item
        android:id="@+id/item2"
        android:orderInCategory="2"
        android:showAsAction="ifRoom|withText"
        android:title="edit2"/>
    <item
        android:id="@+id/item3"
        android:orderInCategory="3"
        android:showAsAction="ifRoom|withText"
        android:title="edit3"/>
    <item
        android:id="@+id/item4"
        android:orderInCategory="5"
        android:showAsAction="ifRoom|withText"
        android:title="edit4"/>
    <item
        android:id="@+id/item5"
        android:orderInCategory="4"
        android:showAsAction="ifRoom|withText"
        android:title="edit5"/>

</menu>

2.点击事件
调用 onOptionsItemSelected(MenuItem item)方法
代码
package com.wang.android.myactionbar;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ActionBar actionBar;
	private Button tabs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub

		MenuInflater mi = getMenuInflater();
		mi.inflate(R.menu.menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.item1:
			Toast.makeText(this, "item1", 2000).show();
			break;
		case R.id.item2:
			Toast.makeText(this, "item2", 2000).show();
			break;

		case R.id.item3:
			Toast.makeText(this, "item3", 2000).show();
			break;

		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

}

把onptionsItemSelected方法换成这个也可以 。。目前没有太大问题
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.item1:
			Toast.makeText(this, "item1", 2000).show();
			break;
		case R.id.item2:
			Toast.makeText(this, "item2", 2000).show();
			break;

		case R.id.item3:
			Toast.makeText(this, "item3", 2000).show();
			break;
			
		default:
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}

3.actionbar  home图标区
可以在mainfest中设置    android:icon="@drawable/ic_launcher"  改变图标的样子 
// 而如果想要对home图标进行点击时间处理,则需要在为这个icon“使能”:
// actionBar.setDisplayHomeAsUpEnabled(true);
// 此home图标的id便是androi.R.id.home;
package com.wang.android.myactionbar;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ActionBar actionBar;
	private Button tabs;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		actionBar = this.getActionBar();
		if (actionBar != null) {
			// icon点击使能
			// 而如果想要对home图标进行点击时间处理,则需要在为这个icon“使能”:
			// actionBar.setDisplayHomeAsUpEnabled(true);
			// 此home图标的id便是androi.R.id.home;
			actionBar.setDisplayHomeAsUpEnabled(true);
		}

		// actionBar.show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub

		MenuInflater mi = getMenuInflater();
		mi.inflate(R.menu.menu, menu);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case android.R.id.home:
			Toast.makeText(this, "home", 2000).show();
			break;
		case R.id.item1:
			Toast.makeText(this, "item1", 2000).show();
			break;
		case R.id.item2:
			Toast.makeText(this, "item2", 2000).show();
			break;

		case R.id.item3:
			Toast.makeText(this, "item3", 2000).show();
			break;

		default:
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}
	// @Override
	// public boolean onOptionsItemSelected(MenuItem item) {
	// // TODO Auto-generated method stub
	// switch (item.getItemId()) {
	// case R.id.item1:
	// Toast.makeText(this, "item1", 2000).show();
	// break;
	// case R.id.item2:
	// Toast.makeText(this, "item2", 2000).show();
	// break;
	//
	// case R.id.item3:
	// Toast.makeText(this, "item3", 2000).show();
	// break;
	//
	// default:
	// break;
	// }
	// return super.onOptionsItemSelected(item);
	// }

}


一般home都是返回到主activity
可以这样写
case android.R.id.home:
            Intent intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                    | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            Toast.makeText(getApplicationContext(), "android.R.id.home", 0)
                    .show();
            break;

如果选择返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,所有在其上的activity都会被销毁,然后主activity会到栈顶,而不用创建主Activity的的新实例。

4.选项卡区域
tabs = (Button) findViewById(R.id.tabs);
		tabs.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				actionBar.setTitle("选项卡");
				actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
				actionBar.addTab(actionBar.newTab().setText("Tab1")
						.setTabListener(MainActivity.this));
				actionBar.addTab(actionBar.newTab().setText("Tab2")
						.setTabListener(MainActivity.this));
				actionBar.addTab(actionBar.newTab().setText("Tab3")
						.setTabListener(MainActivity.this));
			}
		});
		findViewById(R.id.list).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String[] str = { "1", "2", "3", "4", "5" };
				actionBar.setTitle("列表");
				actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
				actionBar.setListNavigationCallbacks(new ArrayAdapter<String>(
						MainActivity.this,
						android.R.layout.simple_spinner_item, str),
						MainActivity.this);
			}
		});

5.视图
基本都在onCreateOptionsMenu(Menu menu)方法里面添加
添加一个搜索 视图
在menu里面加一个这个就可以了
 <item
        android:id="@+id/search"
        android:actionViewClass="android.widget.SearchView"
        android:showAsAction="ifRoom|withText"
        android:title="Search"
       />
主函数中
	// 搜索時間
		SearchView searchView = (SearchView) menu.findItem(R.id.search)
				.getActionView();


分享 视图
// 添加分享按钮的事件
		// 4.0以下没有ShareActionProvider
		MenuItem menuItem_share = menu.findItem(R.id.menu_share);
		// Get the provider and hold onto it to set/change the share intent.
		ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem_share
				.getActionProvider();

		mShareActionProvider.setShareIntent(getDefaultShareIntent());
getDefaultShareInten方法为

private Intent getDefaultShareIntent() {
		// TODO Auto-generated method stub
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setType("text/plain");
		intent.putExtra(Intent.EXTRA_SUBJECT, "小清新短信闪");
		intent.putExtra(Intent.EXTRA_TEXT, "小清新短信闪 1.0");
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		return intent;
	}

xml为
    <item
        android:id="@+id/menu_share"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:enabled="true"
        android:showAsAction="ifRoom"
        android:title="分享"/>

自定义一些功能  拓展功能
    <item
        android:id="@+id/menu_collapse"
        android:actionLayout="@layout/collapsibleview"
        android:icon="@drawable/arro_down"
        android:showAsAction="ifRoom|collapseActionView"
        android:title="拓展"/>
never:永远不会显示。只会在溢出列表中显示。
ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
always:无论是否溢出,总会显示。
withText:Title会显示。
collapseActionView:可拓展的Item。


 android:actionLayout="@layout/collapsibleview"
为自定义的一个layout  
collapsibleview.xml
</pre><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/colla_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <EditText
        android:id="@+id/colla_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
    </EditText>

</LinearLayout>



主函数中

// 给可折叠的view上的控件添加事件
		LinearLayout viewGroup = (LinearLayout) menu.findItem(
				R.id.menu_collapse).getActionView();
		Button btnn = (Button) viewGroup.findViewById(R.id.colla_btn);
		final EditText editText = (EditText) viewGroup
				.findViewById(R.id.colla_edit);
		btnn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(),
						editText.getText() + "~", 0).show();
			}
		});

当折叠的函数 展开或收起的时候也有一个监听 setOnActionExpandListener
MenuItem menuItem = menu.findItem(R.id.menu_collapse);
		menuItem.setOnActionExpandListener(new OnActionExpandListener() {
			@Override
			public boolean onMenuItemActionExpand(MenuItem item) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(),
						"onMenuItemActionExpand", 0).show();
				return true;
			}

			@Override
			public boolean onMenuItemActionCollapse(MenuItem item) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(),
						"onMenuItemActionCollapse", 0).show();
				return true;
			}
		});

自定义的事件。这样就可以自定义任何想要的样式了。。



 代码http://download.csdn.net/detail/wanghao200906/8182135

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值