在AS工程中使用ActionBar
简单实用:
1、功能清单文件中指定主题标签属性Theme.Holo或其子类
1 <application android :theme="@android:style/Theme.Holo.Light" >
2、可以自己指定显示的图标,默认是应用的图标
1 <activity 2 android:name=".UI.MainActivity" 3 android:logo="@drawable/icon" />
3、在Activity中设置属性
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 android.app.ActionBar actionBar= getActionBar(); 7 actionBar.show();//设置显示 8 //actionBar.hide();//设置隐藏 9 actionBar.setHomeButtonEnabled(true); 10 actionBar.setDisplayShowHomeEnabled(true);//以上两句是设置可以让actionBar的图标可以响应点击事件 11 actionBar.setDisplayHomeAsUpEnabled(true);//这一行用于返回效果 12 }
也可以设置Activity标签属性来设置隐藏
1 <activity 2 android:name=".UI.WelComeActivity" 3 android:theme="@android:style/Theme.NoTitleBar">
4、在res资源目录下创建一个menu文件夹,在menu文件夹创建一个actionbar_menu.xml
android:showAsAction :标签属性,根据需要自行设置
android:title :一般都设置,根据需要,但并不一定会显示,根据showAsAction标签影响
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item 4 android:id="@+id/menu_seek" 5 android:showAsAction="always" 6 android:actionViewClass="android.widget.SearchView" 7 android:title="搜索" /> 8 <item 9 android:id="@+id/menu_history" 10 android:showAsAction="never" 11 android:title="查看历史" /> 12 <item 13 android:id="@+id/menu_down" 14 android:showAsAction="never" 15 android:title="查看下载" /> 16 </menu>
fRoom | 会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个 |
数并不仅仅局限于4个,依据屏幕的宽窄而定 | |
never | 永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好 |
把标题都带上。 | |
always | 无论是否溢出,总会显示。 |
withText | withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个 |
标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可 | |
能显示不全。 | |
collapseActionView | 声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则, |
这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。 | |
一般要配合ifRoom一起使用才会有效果。 |
5、重写回调方法,就可以显示了
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 MenuInflater inflater = getMenuInflater(); 4 inflater.inflate(R.menu.actionbar_menu, menu); 5 return super.onCreateOptionsMenu(menu); 6 }
点击显示效果
6、重写点击回调方法,根据需要添加代码
android.R.id.home默认指定的是左上角的图标点击响应
1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 switch (item.getItemId()) { 4 case android.R.id.home: 5 Toast.makeText (this, "你点击了“home”按键!" , Toast.LENGTH_SHORT).show() ; 6 return true; 7 case R.id. menu_seek: 8 Toast.makeText (this, "你点击了“搜索”按键!" , Toast.LENGTH_SHORT).show() ; 9 return true; 10 case R.id. menu_down: 11 Toast.makeText (this, "你点击了“查看下载”按键!" , Toast.LENGTH_SHORT).show() ; 12 return true; 13 case R.id. menu_history: 14 Toast.makeText (this, "你点击了“查看历史”按键!" , Toast.LENGTH_SHORT).show() ; 15 return true; 16 default: 17 return super .onOptionsItemSelected(item); 18 } 19 }
一般左上角的图标点击都是回退到主界面,在图标的点击响应添加代码
1 case android.R.id.home: 2 //finish();这个只是简单的销毁了当前的界面 3 Intent upIntent = NavUtils.getParentActivityIntent(this);//获取到跳转至父Activity的Intent 4 //如果父Activity和当前Activity是在同一个Task中的,则直接调用navigateUpTo()方法进行跳转 5 if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 6 android.support.v4.app.TaskStackBuilder.create(this) 7 .addNextIntentWithParentStack(upIntent) 8 .startActivities(); 9 } else {//如果不是在同一个Task中的,则需要借助TaskStackBuilder来创建一个新的Task 10 upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 11 NavUtils.navigateUpTo(this, upIntent); 12 } 13 Toast.makeText(this, "你点击了“home”按键!", Toast.LENGTH_SHORT).show(); 14 return true;