android ActionBar的使用


 Action Bar主要功能包含:
  1. 显示选项菜单
  2. 提供标签页的切换方式的导航功能,可以切换多个fragment. 
  3.  提供下拉的导航条目.
  4. 提供交互式活动视图代替选项条目 
  5. 使用程序的图标作为返回Home主屏或向上的导航操作。


首先说下,使用OverFlow的时候需要在onCreate()函数中调用如下方法:

private void forceShowOverflowMenu() {  
    try {  
        ViewConfiguration config = ViewConfiguration.get(this);  
        Field menuKeyField = ViewConfiguration.class  
                .getDeclaredField("sHasPermanentMenuKey");  
        if (menuKeyField != null) {  
            menuKeyField.setAccessible(true);  
            menuKeyField.setBoolean(config, false);  
        }  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}

注:此处未使用这种实现方式,本应用中使用的PopupMen


以下是自己开发的项目所使用到的ActionBar:

public class ShopOrderActivity extends ActionBarActivity implements
		OnTouchListener, OnMenuItemClickListener{
	private Toast mToast;
	private Context context;
	/** AlertDialog中输入反馈框 */
	private EditText et_FeedBack;
	private PopupMenu popupMenu;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.shop_order);

		//设置Home图标区域
//		requestWindowFeature(Window.FEATURE_LEFT_ICON);
//		setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, resId);
		
		this.context = this;
		mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);

		initActionBar();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.actionbar_menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.actionbar_overflow) {
			if (popupMenu == null) {
				popupMenu = new PopupMenu(this,
						findViewById(R.id.actionbar_overflow));
				popupMenu.inflate(R.menu.actionbar_pop);
				popupMenu.setOnMenuItemClickListener(this);
			}
			popupMenu.show();
			return true;
		} else if (<pre name="code" class="java">public class ShopOrderActivity extends ActionBarActivity implements
		OnTouchListener, OnMenuItemClickListener{
	private Toast mToast;
	private Context context;
	/** AlertDialog中输入反馈框 */
	private EditText et_FeedBack;
	private PopupMenu popupMenu;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.shop_order);

		//设置Home图标区域
//		requestWindowFeature(Window.FEATURE_LEFT_ICON);
//		setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, resId);
		
		this.context = this;
		mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);

		initActionBar();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.actionbar_menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.actionbar_overflow) {
			if (popupMenu == null) {
				popupMenu = new PopupMenu(this,
						findViewById(R.id.actionbar_overflow));
				popupMenu.inflate(R.menu.actionbar_pop);
				popupMenu.setOnMenuItemClickListener(this);
			}
			popupMenu.show();
			return true;
		} else if (id == android.R.id.home) {
			finish();
		} else if (id == R.id.new_order_bar) {
			showTip("显示红点"); 
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public boolean onMenuItemClick(MenuItem arg0) {
		Intent intent;
		switch (arg0.getItemId()) {
		case R.id.actionbar_settings:
			intent = new Intent(this, SettingsActivity.class);
			startActivity(intent);
			break;
		case R.id.historyOrder:
			intent = new Intent(this, HistoryOrderActivity.class);
			startActivity(intent);
			break;
		case R.id.logout:
			AlertDialog.Builder builder = new AlertDialog.Builder(
					ShopOrderActivity.this);
			builder.setTitle("确定要退出吗?");
			builder.setPositiveButton("确定",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							showTip("退出登录!");
						}
					});
			builder.setNegativeButton("取消",
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}
					});
			builder.create().show();
			break;
		}
		return false;
	}

	/**
	 * 初始化ActionBar
	 */
	private void initActionBar() {
		ActionBar actionBar = getSupportActionBar();
		actionBar.setTitle("抢单");
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setHomeButtonEnabled(true);
		// actionBar.setIcon(R.drawable.back_menu);
		// Drawable background = (Drawable) getResources()
		// .getDrawable(R.drawable.top_bg);
		// getActionBar().setBackgroundDrawable(background);
		setTitleColor(this.getResources().getColor(R.color.green));// 没反应
	}

	/**
	 * 显示Toast
	 * 
	 * @param str
	 */
	public void showTip(final String str) {
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				mToast.setText(str);
				mToast.show();
			}
		});
	}
}

 
id == android.R.id.home
当操作左上角icon图标的时候实现的功能是返回,配置清单需要设置:

<activity
            android:name="com.shop.order.ShopOrderActivity"
            android:launchMode="singleTop"
            android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
</activity>

actionbar_menu的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    
    <item
        android:id="@+id/new_order_bar"
        android:title="@string/new_order"
        android:icon="@drawable/ic_launcher"
        app:showAsAction="ifRoom|withText"/>
    
    <item
        android:id="@+id/actionbar_overflow"
        android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_dark"
        android:title="@string/pop"
        app:showAsAction="ifRoom|withText"/>
</menu>

注意:app:showAsAction="ifRoom|withText"如果写成android:showAsAction="ifRoom|withText"则不会在actionbar显示,当操作手机右下角的menu键时才会显示


actionbar_pop的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/actionbar_settings"
        android:title="@string/settings"/>
    <item
        android:id="@+id/historyOrder"
        android:title="@string/historyorder"/>
    <item
        android:id="@+id/logout"
        android:title="@string/logout"/>
</menu>

分隔操作栏

当应用程序在Android4.0(API级别14)或以上的版本运行,那么还有一种叫做“分隔操作栏”的额外模式对action bar有效。当你启用分隔操作栏模式时,在屏幕的底部会显示一个独立的横条,用于显示Activity在窄屏幕社保上运行时的所有操作项。

要启用分离式操作栏,只需简单的在<application>或<activity>元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置就可以了。

下图中左边是未设置分离式操作栏,右边图是设置了分离式操作栏:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值