ActionBar入门

来源:互联网 发布:皇室战争辅助软件 编辑:程序博客网 时间:2024/06/03 21:18

一.简介

ActionBar是android3.0后加入系统api的导航栏功能,表示了用户当前操作界面的位置,并未用户提供了额外的动作、界面导航等功能。有包括自适应屏幕尺寸、提供统一全局UI界面等优势。

二.使用介绍

A.添加、删除和基本属性

ActionBar被包含在所有使用Theme.Holo主体的Activity及其子类中,当新建一个项目时,application的theme会自动指定为Theme.Holo(缺省值),如果没有自动指定,让 Activity继承ActionBarActivity即可。
如果需要删除ActionBar,有两种方式。一是讲 theme改成Theme.Holo.NoActionBar。二是将actionBar隐藏掉,代码如下。
ActionBar actionBar = getActionBar();  actionBar.hide(); 
ActionBar的图标和标题会存放在配置文件中,可以在<application>或者<activity>中通过logo属性来进行指定。

B.添加按钮与监听

当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源,并把所有的Action按钮都定义在资源文件里面就可以了。

@Override  public boolean onCreateOptionsMenu(Menu menu) {      MenuInflater inflater = getMenuInflater();      inflater.inflate(R.menu.main, menu);      return super.onCreateOptionsMenu(menu);  } 
<menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      tools:context="com.example.actionbartest.MainActivity" >        <item          android:id="@+id/action_compose"          android:icon="@drawable/ic_action_compose"          android:showAsAction="always"          android:title="@string/action_compose"/>      <item          android:id="@+id/action_delete"          android:icon="@drawable/ic_action_delete"          android:showAsAction="ifRoom"          android:title="@string/action_delete"/>      <item          android:id="@+id/action_settings"          android:icon="@drawable/ic_launcher"          android:showAsAction="never"          android:title="@string/action_settings"/>    </menu>  
icon和id不用多说,title指向了需要显示的文字,但是大部分情况这些文字是不显示的。showAsAction属性为显示的位置,可能的值有三个:always代表永远显示;ifRoom代表空间允许时显示,不允许的时候收入overflow中;never代表永远收入overflow中。
设置点击响应,需要编写onOptionsltemSelect()方法
@Override  public boolean onOptionsItemSelected(MenuItem item) {      switch (item.getItemId()) {      case R.id.action_compose:          Toast.makeText(this, "Compose", Toast.LENGTH_SHORT).show();          return true;      case R.id.action_delete:          Toast.makeText(this, "Delete", Toast.LENGTH_SHORT).show();          return true;      case R.id.action_settings:          Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();          return true;      default:          return super.onOptionsItemSelected(item);      }  }  

如此例中每个按钮对应了一个toast显示。

三.ActionBar的导航功能

ActionBar具备众多的导航功能,最基础的默认功能时导航栏左侧图标的返回上一级页面的导航功能,只需要在onOptionsltemSelect()方法中添加响应的调用即可。
复杂一点的如tab导航和下拉导航实现如下(代码参考相应书籍和教程)。

下拉导航:
import android.os.Bundle;import android.support.v7.app.ActionBar;import android.support.v7.app.ActionBar.OnNavigationListener;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.widget.ArrayAdapter;import android.widget.Toast;import com.jph.ab.utils.Utils;/** * ActionBar实现下拉导航 * @author jph * Date:2014.10.13 */public class SpinnerActionBar extends ActionBarActivity {private ActionBar actionbar;/**菜单名称***/private String[] menuItems;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Utils.showOverflowMenu(this);//如果手机有menu键也显示flowMenuactionbar=getSupportActionBar();//获取v7兼容包中的ActionBaractionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);menuItems=getResources().getStringArray(R.array.menus);//获取string_array.xml中的menus数组ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.spinner,R.id.tvMenu,menuItems );actionbar.setListNavigationCallbacks(adapter, new OnNavigationListener() {@Overridepublic boolean onNavigationItemSelected(int itemPosition, long itemId) {// TODO Auto-generated method stubUtils.showToast(SpinnerActionBar.this,"您选择了:"+ menuItems[itemPosition],Toast.LENGTH_SHORT);return true;}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.simple, menu);//获取menu目录下simple.xml的菜单文件return true;}@Overridepublic 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();switch (id) {case R.id.refresh:Utils.showToast(this, "您点击了刷新菜单", Toast.LENGTH_SHORT);return true;case R.id.cancle:Utils.showToast(this, "您点击了取消菜单", Toast.LENGTH_SHORT);return true;case R.id.cancle2:Utils.showToast(this, "您点击了删除菜单", Toast.LENGTH_SHORT);return true;case R.id.setting:Utils.showToast(this, "您点击了设置菜单", Toast.LENGTH_SHORT);return true;case R.id.play:Utils.showToast(this, "您点击了播放菜单", Toast.LENGTH_SHORT);return true;}return super.onOptionsItemSelected(item);}}

Tab导航:
import java.util.ArrayList;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.support.v7.app.ActionBar;import android.support.v7.app.ActionBar.Tab;import android.support.v7.app.ActionBar.TabListener;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;import com.jph.ab.fragment.BaseFragment;import com.jph.ab.fragment.BaseFragmentPagerAdapter;import com.jph.ab.utils.Utils;/** * ActionBar实现Tab导航 * 程序亮点:ActionBar Tab+ViewPager+Fragment * @author jph * Date:2014.10.13 */public class TabActionBar extends ActionBarActivity {private ActionBar actionbar;private ViewPager vpContent;/**ViewPager包含的Fragment集合**/private ArrayList<Fragment> fragments;/**ActionBar上的Tab集合**/private ArrayList<Tab> tabs;/**当前页**/protected int currentPage;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.tab_actionbar);Utils.showOverflowMenu(this);//如果手机有menu键也显示flowMenuinitViewPager();//初始化ViewPager要在初始化initTab之前,否则会出错initTab();}/** * 初始化Tab */private void initTab() {// TODO Auto-generated method stubtabs=new ArrayList<Tab>();actionbar=getSupportActionBar();//获取v7兼容包中的ActionBaractionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);Tab tabMyContacts=actionbar.newTab();//创建一个tab实例Tab tabMyFavorite=actionbar.newTab();tabMyContacts.setTag(0);//为Tab设置Tag,用于标识Tab的位置tabMyContacts.setText("全部联系人");tabMyFavorite.setTag(1);tabMyFavorite.setText("常用联系人");tabMyContacts.setTabListener(tabListener);//为Tab设置监听(这一步是必须的,不然系统会不报错)tabMyFavorite.setTabListener(tabListener);tabs.add(tabMyContacts);tabs.add(tabMyFavorite);actionbar.addTab(tabMyContacts);//将Tab添加ActionBar上actionbar.addTab(tabMyFavorite);}/** * 初始化ViewPager */private void initViewPager() {// TODO Auto-generated method stubvpContent=(ViewPager)findViewById(R.id.vpContent);//初始化ViewPager显示的页面集合fragments = new ArrayList<Fragment>();BaseFragment fragment1=BaseFragment.newInstance(BaseFragment.LOAD_FRAGMENT_1);BaseFragment fragment2=BaseFragment.newInstance(BaseFragment.LOAD_FRAGMENT_2);fragments.add(fragment1);fragments.add(fragment2);//设置ViewPager adapterBaseFragmentPagerAdapter adapter=new BaseFragmentPagerAdapter(getSupportFragmentManager(), fragments);vpContent.setAdapter(adapter);vpContent.setCurrentItem(0);//默认显示第一个页面//监听ViewPager事件vpContent.setOnPageChangeListener(new OnPageChangeListener(){@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {currentPage = position;actionbar.selectTab(tabs.get(position));//当滑动页面结束让ActionBar选择指定的Tab}@Overridepublic void onPageScrollStateChanged(int state) {}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.simple, menu);//获取menu目录下simple.xml的菜单文件return true;}@Overridepublic 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();switch (id) {case R.id.refresh:Utils.showToast(this, "您点击了刷新菜单", Toast.LENGTH_SHORT);return true;}return super.onOptionsItemSelected(item);}/** * ActionBar的Tab监听器 */TabListener tabListener=new TabListener() {@Overridepublic void onTabUnselected(Tab arg0, FragmentTransaction arg1) {// TODO Auto-generated method stub}@Overridepublic void onTabSelected(Tab selectedTab, FragmentTransaction arg1) {// TODO Auto-generated method stubvpContent.setCurrentItem((Integer) selectedTab.getTag());//当选中了指定的Tab后让VeiwPager滑动到指定页面}@Overridepublic void onTabReselected(Tab arg0, FragmentTransaction arg1) {// TODO Auto-generated method stub}};}

















原创粉丝点击