zoukankan      html  css  js  c++  java
  • 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”属性设置就能够了。

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




  • 相关阅读:
    取石子(五)(FIB博弈)
    NYOJ-161-取石子 (四)(Wythoff 博弈)
    memcached简介
    RSA---应用最广泛的非对称加密算法
    分区
    按子组收集数据
    多级分组
    归约和汇总
    收集器Collectors
    由函数生成流---创建无限流:Stream.iterate和Stream.generate
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7000822.html
Copyright © 2011-2022 走看看