学习ActionBar笔记

ActionBar 笔记

ActionBar是3.0之后出现的控件,取代menu,显示在标题栏位置。

我们能在应用中看见的actionbar一般就是下图的样子,比如快图应用

1.App icon 应用的图标,左侧带应用相当于back返回键

2.ViewControl

3.Action button 相当于普通的Button可以监听点击事件

4.Action overflow 三个点,相当于手机上的menu键,可以显示隐藏的action button



通过getActionBar()得到对象。

1.普通ActionBar

创建方式与Menu(xml创建)一样,不过item中需要设定android:showAsAction属性,不设定就是默认never,item将为menu的item,选择always或者ifRoom将为ActionBar。

   图中红框标记的  仅仅设置了属性 
 

布局很简单 menu中写
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="aa"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="bb"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="cc"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="dd"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="ee"/>

</menu>



android:showAsAction
----->里面几个属性  never:从不显示actionbar

----->里面几个属性  ifRoom:如果有空间显示actionbar
----->里面几个属性  always:总是显示actionbar(慎用)
----->里面几个属性  withText:带有图片和文字显示actionbar

当actionbar中内容很多 会隐藏  有MNEU键的 按可以显示出来没有Menu的 会出现3个点


想一直显示三个点 用下面方法
<span style="color:#000000;">public class MainActivity xxx{
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
         <span style="font-family:Comic Sans MS;">//调用即可</span>
        getOverflowMenu();
    }
 
    //force to show overflow menu in actionbar
    private void getOverflowMenu() {
         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();
        }
    }</span>

2.类似spinner效果




<span style="color:#000000;">package com.example.actionbardemo;

import java.lang.reflect.Field;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
	private String[] title = { "测试一", "测试二", "测试三" };

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ActionBar actionBar = getActionBar();
		actionBar.setHomeButtonEnabled(true);
<span style="font-family:Comic Sans MS;">                           //显示箭头
</span>                actionBar.setDisplayHomeAsUpEnabled(true);
		getOverflowMenu();
		
		  //类似spinner效果
		  actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		  ArrayAdapter<String> adapter = new
		  ArrayAdapter<String>(MainActivity.this
		  ,android.R.layout.simple_spinner_dropdown_item,title);
		  ActionBar.OnNavigationListener listener=new OnNavigationListener() {
		  
		  @Override public boolean onNavigationItemSelected(int arg0, long
		  arg1) { // TODO Auto-generated method stub
		  Toast.makeText(MainActivity.this, title[arg0],0).show(); return
		  false; } }; actionBar.setListNavigationCallbacks(adapter, listener);
		 
		// 类似 Tabhost 效果

	}

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		// 给home图标加监听
		int id = item.getItemId();
		// 系统id
		if (id == android.R.id.home) {
			Toast.makeText(MainActivity.this, "home", 0).show();
		}
		return super.onOptionsItemSelected(item);
	}

}
</span>
3.类似tabhost效果

package com.example.actionbardemo;

import java.lang.reflect.Field;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class MainActivity extends Activity implements TabListener {
	private String[] title = { "测试一", "测试二", "测试三" };

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ActionBar actionBar = getActionBar();
		actionBar.setHomeButtonEnabled(true);
		actionBar.setDisplayHomeAsUpEnabled(true);
		getOverflowMenu();

		/*
		 * // 类似spinner效果
		 * actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		 * ArrayAdapter<String> adapter = new ArrayAdapter<String>(
		 * MainActivity.this, android.R.layout.simple_spinner_dropdown_item,
		 * title); ActionBar.OnNavigationListener listener = new
		 * OnNavigationListener() {
		 * 
		 * @Override public boolean onNavigationItemSelected(int arg0, long
		 * arg1) { // TODO // Auto-generated // method // stub
		 * Toast.makeText(MainActivity.this, title[arg0], 0).show(); return
		 * false; } }; actionBar.setListNavigationCallbacks(adapter, listener);
		 */

		// 类似 Tabhost 效果
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

		Tab tab = actionBar.newTab();
		tab.setIcon(android.R.drawable.ic_menu_add);
		tab.setText("添加");
		tab.setTag("tab001");
		tab.setTabListener(this);
		actionBar.addTab(tab);
		
		
		Tab tab002 = actionBar.newTab();
		tab002.setIcon(android.R.drawable.ic_menu_add);
		tab002.setText("添加");
		tab002.setTag("tab001");
		tab002.setTabListener(this);
		actionBar.addTab(tab002);
		
		// Action Bar Tab must have a Callback 必须有回调

	}

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

	// 每个选项卡的监听
	@Override
	public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		// 给home图标加监听
		int id = item.getItemId();
		// 系统id
		if (id == android.R.id.home) {
			Toast.makeText(MainActivity.this, "home", 0).show();
		}
		return super.onOptionsItemSelected(item);
	}

}

显示在底部的ActionBar


   在AndroidManifest里的Activity加上属性


android:uiOptions="splitActionBarWhenNarrow"后,普通ActionBar将不再显示在标题


栏部分,而是显示在屏幕底部:


actionBar.setDisplayHomeAsUpEnabled(true)    // 给左上角图标的左边加上一个返


回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP


actionBar.setDisplayShowHomeEnabled(true)   //使左上角图标可点击,对应id为


android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME


actionBar.setDisplayShowCustomEnabled(true)  // 使自定义的普通View能在title栏


显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM


actionBar.setDisplayShowTitleEnabled(true)   //对应


ActionBar.DISPLAY_SHOW_TITLE


actionBar.hide()   //  影藏标题栏


actionBar.show()  // 显示标题栏



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值