Adnroid ActionBar 各种用法

一. 基础用法-显示和隐藏

1. 在xml中显示活隐藏

如果你不想要Action bar,把Activity的主题设置为Theme.Holo.NoActionBar就可以了

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

2. 在Activity中显示活隐藏

先得到Actionbar对象,再对其进行操作:show()或者hide()

ActionBar actionBar = getActionBar();  
actionBar.hide();  

在隐藏和删除Action bar时,也许回使Activity重新布局。如果不想重新布局可以使用覆盖模式。覆盖模式在Activity的顶部描画操作栏,而不是在它们所拥有的屏幕的区域。这样,布局可以保持不变。要使用覆盖模式,就要给Activity创建一个主题,并且把android:windowActionBarOverlay属性设置为true。
       提示:如果你有一个删除了Action bar的Activity主题,它把android:windowActionBar样式属性设置为false。但是,如果你使用了这个主题,创建窗口将不允许Action bar再显示,这时getActionBar()方法将返回null。

3. 其他的一些属性

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()  // 显示标题栏

二. ActionBar与ViewPager结合使用

实例:主Activity:
viewpager的每个页面暂时用android自带的layout代替,可以替换做其他layout
public class MainActionBarUnionVp extends Activity implements TabListener,
		OnPageChangeListener {
	private ActionBar actionBar;
	private ViewPager viewPager;
	private List<View> viewList;
	private MainPageAdapter viewPagerAdapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.actionbar_unionvp_main);
		viewPager = (ViewPager) findViewById(R.id.view_pager);
		actionBar = getActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		actionBar.setDisplayShowTitleEnabled(false);
		actionBar.setDisplayShowHomeEnabled(true);
		Tab tab = actionBar.newTab().setText("第一页").setTabListener(this);
		actionBar.addTab(tab);

		tab = actionBar.newTab().setText("第二页").setTabListener(this);
		actionBar.addTab(tab);

		tab = actionBar.newTab().setText("第三页").setTabListener(this);
		actionBar.addTab(tab);
		viewList = new ArrayList<View>();
		View view1 = (View) View.inflate(this,
				android.R.layout.activity_list_item, null);
		View view2 = (View) View.inflate(this,
				android.R.layout.expandable_list_content, null);
		View view3 = (View) View.inflate(this,
				android.R.layout.simple_dropdown_item_1line, null);
		viewList.add(view1);
		viewList.add(view2);
		viewList.add(view3);
		viewPagerAdapter = new MainPageAdapter();
		viewPager.setAdapter(viewPagerAdapter);
		viewPager.setCurrentItem(0);
		viewPager.setOnPageChangeListener(this);
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {
	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
	}

	@Override
	public void onPageSelected(int arg0) {
		actionBar.getTabAt(arg0).select();
	}

	public class MainPageAdapter extends PagerAdapter {
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			View view = viewList.get(position);
			viewPager.addView(view);
			return view;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(viewList.get(position));
		}

		@Override
		public int getCount() {
			return viewList.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

	}

	@Override
	public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {

	}

	@Override
	public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
		viewPager.setCurrentItem(tab.getPosition());
	}

	@Override
	public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {

	}
}
layout 文件:actionbar_nuionvp_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</FrameLayout>
在AndroidManifest里的Activity加上属性android:uiOptions="splitActionBarWhenNarrow"后,普通ActionBar将不再显示在标题栏部分,而是显示在屏幕底部

三. ActionBar中添加下拉菜单

下拉菜单的实现主要是添加一个Spinner
在ActionBar中添加下拉菜单,主要有一下几个关键步骤:
  1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项
  2. 实现ActionBar.OnNavigationListener接口,当点击ActionBar的菜单项是进行相应的操作
  3. 调用setNavigationMode()方法将ActionBar的操作模型设置为ActionBar.NAVIGATION_MODE_LIST. 注意:这个步骤应该在Activity的onCreate()回调函数时执行
  4. 调用setListNavigationCallbacks()方法为ActionBar添加适配器和监听器.

其中mSpinnerAdapter是spinnerAdapter的对象,mOnNavigationListener是ActionBar.OnNavigationListener的对象。
首先添加显示下拉列表的内容:在string.xml的resources节点中添加
    <string-array name="actionbar_student">
        <item>邓名侨</item>
        <item>刘天喜</item>
        <item>其黄石</item>
        <item>蔡宏远</item>
    </string-array>


为了对actionbar初始化,在Activity中的onCreate函数中添加:
	// 生成一个SpinnerAdapter
		SpinnerAdapter adapter = ArrayAdapter.createFromResource(this,
				R.array.actionbar_student, android.R.layout.simple_spinner_dropdown_item);
		// 得到ActionBar
		ActionBar actionBar = getActionBar();
		// 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
		// 为ActionBar设置下拉菜单和监听器
		actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());
其中类DropDownListenser为:
	/**
	 * * 实现 ActionBar.OnNavigationListener接口
	 */
	class DropDownListenser implements OnNavigationListener {
		// 得到和SpinnerAdapter里一致的字符数组
		String[] listNames = getResources().getStringArray(
				R.array.actionbar_student);

		/* 当选择下拉菜单项的时候,将Activity中的内容置换为对应的Fragment */
		public boolean onNavigationItemSelected(int itemPosition, long itemId) {
			// 生成自定的Fragment
			FragmentDropList student = new FragmentDropList();
			FragmentManager manager = getSupportFragmentManager();
			FragmentTransaction transaction = manager.beginTransaction();
			// 将Activity中的内容替换成对应选择的Fragment
			transaction.replace(R.id.droplist_content, student, listNames[itemPosition]);
			transaction.commit();
			return true;
		}
	}

其中 transaction.replace函数中第一个参数是定义要换内容的Fragment的布局,我用的是LinearLayout
FragmentDropList为Fragment类,类中只用了一个TextView显示选择的内容
public class FragmentDropList extends Fragment {
	// Fragment对应的标签,当Fragment依附于Activity时得到 
	private String tag;

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		tag = getTag();
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		TextView textView = new TextView(getActivity());
		textView.setText(tag);
		return textView;
	}
}





参考:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值