android ActionBar详解
2014-02-26 19:59
281 查看
1:ActionBar介绍
ActionBar和Fragement都是android3.0以后出的新特性。ActionBar有点像Windows下面的工具栏,可以放置各种控件。在ADT创建工程的时候里面有两个文件夹values-v11和values-v14这两个文件里面定义就是android3.x和4.x的两种不同ActionBar风格。2:ActionBar实例介绍
2.1:ActionBar使用简介
当我们创建工程的时候会在menu文件夹下面生成一个main.xml的文件夹,打开这个xml里面的有个属性是我们ActionBar的主要的属性,<item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/>这里有个showAsAction="always"这个属性就是我们ActionBar的主要属性,它规定了我们的item显示的方式,默认创建的时候它的值是never,这个属性有五个值。1.ifRoom ----------只有在ActionBar有空间的时候才会显示2:withText -------------显示文字,一般与ifRoom一起使用。3: never ---------不显示在ActionBar上面4:always---------总是放在actionbar上面但是如果实在放不下去还是不会放5:coolapseActionVIew-----允许与Action按钮关联的Action视图可折叠下面我们来看一个例子这里给出我们的xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_test_one" android:orderInCategory="100" android:showAsAction="ifRoom" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_test_two" android:orderInCategory="100" android:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> </menu>然后看看我们的java代码
public class MainActivity extends Activity { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //这一句的意思是隐藏ActionBar()效果跟requestWindowFeature(Window.FEATURE_NO_TITLE); //差不多 //getActionBar().hide(); } //这里加载菜单也就是加载ActionBar @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; } //处理ActionBar的点击事件 @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "actionbar test", Toast.LENGTH_SHORT).show(); return super.onOptionsItemSelected(item); } }
如果想要把ActionBar放在底部就需要在Activity里面添加一个属性
<activity android:name="com.example.actionbardemo.MainActivity" android:uiOptions="splitActionBarWhenNarrow" android:label="@string/app_name" />
这样ActionBar就会在底部了但是这个属性是4.0以后才开始支持的。
2:收缩和展开ActionBar
在item标签下面还有两个属性 android:actionViewClass=""android:actionLayout=""
这两个属性就会直接替换控件的视图。随意指定一个但是如果两个都指定了Class这个属性会高于Layout这个属性。
如果需要在展开的时候进行一些操作就需要实现
OnActionExpandListener这个接口里面有两个函数@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
return false;
}
看代码就知道是干什么了的,然后就是展开和收起操作
item.expandActionView();//展开
item.collapseActionView();//收起
3:ActionProvider
我们要实现的样子就是分享功能还是先看我们的xml的代码。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/Share" android:orderInCategory="100" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" android:title="分享"/> <item android:id="@+id/action_test_one" android:orderInCategory="100" android:showAsAction="ifRoom" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_test_two" android:orderInCategory="100" android:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> </menu>
然后我们在看看java的实现代码最主要的就是onCreateOptionsMenu其它都一样这里我贴出来。
//这里加载菜单也就是加载ActionBar @SuppressLint("NewApi") @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); MenuItem item = menu.findItem(R.id.Share); //获取对象 ShareActionProvider actionProvider = (ShareActionProvider)item.getActionProvider(); Intent intent = new Intent(Intent.ACTION_SEND); //在分享的时候值显示可以接收文本的程序 intent.setType("text/plain"); //设置要分享的数据 intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); intent.putExtra(Intent.EXTRA_TEXT, "使用ShareActionProvider"); actionProvider.setShareIntent(intent); //设置一个分享历史避免一个程序中多个分享历史的程序 // actionProvider.setShareHistoryFileName("share.xml"); return true; }同时也可以自己定义ActionProvider。有兴趣的可以自己研究一下。
4:导航标签
我们用actionbar替换tabhost,因为actionbar比它更强大,更灵活。一般使用ActionBar的为导航的具体步骤如下。1:首先设置ActionBar为导航标签模式
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
2:实现ActionBar.TabLisenler接口
3:创建标签对象
4:添加标签
5:保存和恢复状态
这里看看代码,xml没有改动过,直接上java代码
public class MainActivity extends Activity implements TabListener {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这一句的意思是隐藏ActionBar()效果跟requestWindowFeature(Window.FEATURE_NO_TITLE);
//差不多
//getActionBar().hide();
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar.newTab().setText("tab1").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("tab2").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("tab3").setTabListener(this));
}
//这里加载菜单也就是加载ActionBar @SuppressLint("NewApi") @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); MenuItem item = menu.findItem(R.id.Share); //获取对象 ShareActionProvider actionProvider = (ShareActionProvider)item.getActionProvider(); Intent intent = new Intent(Intent.ACTION_SEND); //在分享的时候值显示可以接收文本的程序 intent.setType("text/plain"); //设置要分享的数据 intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); intent.putExtra(Intent.EXTRA_TEXT, "使用ShareActionProvider"); actionProvider.setShareIntent(intent); //设置一个分享历史避免一个程序中多个分享历史的程序 // actionProvider.setShareHistoryFileName("share.xml"); return true; }
//处理ActionBar的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "actionbar test", Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
/**
* 这个是tab的放开调用的方法
*/
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
/**
* 这个是tab的选中调用的方法
*/
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
/**
* 这个是tab的为选中调用的方法
*/
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
5:下拉导航列表
实现导航栏下来要实现这几个步骤1:设置ActionBar的导航模式为下拉列表
2:实现ActionBar.OnNavigationListener接口中的方法
3:创建Adapter
4:绑定adapter
5:数据的保存和恢复
我们来看代码,直接上java的xml的一点没变
public class MainActivity extends Activity implements OnNavigationListener { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //这一句的意思是隐藏ActionBar()效果跟requestWindowFeature(Window.FEATURE_NO_TITLE); //差不多 //getActionBar().hide(); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(new ArrayAdapter<String>(actionBar.getThemedContext(), android.R.layout.simple_list_item_1, android.R.id.text1, new String[] { "条目1", "条目2", "条目3" }), this); } //这里加载菜单也就是加载ActionBar @SuppressLint("NewApi") @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); MenuItem item = menu.findItem(R.id.Share); //获取对象 ShareActionProvider actionProvider = (ShareActionProvider) item.getActionProvider(); Intent intent = new Intent(Intent.ACTION_SEND); //在分享的时候值显示可以接收文本的程序 intent.setType("text/plain"); //设置要分享的数据 intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); intent.putExtra(Intent.EXTRA_TEXT, "使用ShareActionProvider"); actionProvider.setShareIntent(intent); //设置一个分享历史避免一个程序中多个分享历史的程序 // actionProvider.setShareHistoryFileName("share.xml"); return true; } //处理ActionBar的点击事件 @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "actionbar test", Toast.LENGTH_SHORT).show(); return super.onOptionsItemSelected(item); } /** * 点击条目的时候调用的方法 */ @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // TODO Auto-generated method stub return false; } }
相关文章推荐
- Android UI开发详解之ActionBar
- 详解Android ActionBar之一:ActionBar概述与创建
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
- Android UI开发详解之ActionBar
- Android UI开发详解之ActionBar
- Android Action Bar 详解篇
- Android UI开发详解之ActionBar
- 详解Android ActionBar之二:ActionBar添加Tabs标签和下拉导航
- Android ActionBar详解
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
- Android Action Bar 使用详解
- android ActionBar用法详解
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
- Android Action Bar 详解篇
- Android ActionBar搜索功能用法详解
- Android UI开发详解之ActionBar
- Android Action Bar 详解篇
- android 开发之Action Bar 详解
- Android UI开发详解之ActionBar