前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓开发_浅谈Action Bar

安卓开发_浅谈Action Bar

作者头像
听着music睡
发布2018-05-18 13:52:26
8410
发布2018-05-18 13:52:26
举报
文章被收录于专栏:Android干货Android干货Android干货

一、Action Bar

导航栏。是3.0之后出现的。

所以注意使用的时候清单文件要设置下

 android:minSdkVersion="11"(至少11)

但如果使用v4包,则不需修改

二、ActionBar常用操作

1、删除Action Bar

因为3.0默认的主题默认创建Action Bar,所以只要设置下主题Theme.Holo.NoActionBar

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

2、隐藏Action Bar

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

3、显示Action

ActionBar actionBar = getActionBar();
if(!actionBar.isShowing())
actionBar.show();

4、添加操作性,在ActionBar中显示菜单项

大致的实现步骤和菜单实现差不多,只需要修改 android:showAsAction 属性

(1)在res-menu文件夹下添加菜单项

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2 
 3     <item
 4         android:id="@+id/action_call"
 5         android:orderInCategory="100"
 6         android:showAsAction="always"
 7         android:icon="@android:drawable/ic_menu_call"
 8         android:title="拨号"/>
 9     <item
10         android:id="@+id/action_help"
11         android:orderInCategory="100"
12         android:showAsAction="always|withText"
13         android:icon="@android:drawable/ic_menu_help"
14         android:title="帮助"/>
15     <item
16         android:id="@+id/action_camera"
17         android:orderInCategory="100"
18         android:showAsAction="collapseActionView"
19         android:icon="@android:drawable/ic_menu_camera"
20         android:title="相机"/>
21     <item
22         android:id="@+id/action_delete"
23         android:orderInCategory="100"
24         android:showAsAction="always"
25         android:icon="@android:drawable/ic_menu_delete"
26         android:title="删除"/>
27 
28 </menu>

可以看出和以前创建菜单项的时候 android:showAsAction 属性发生了变化

android:showAsAction 有五个属性值

1 android:showAsAction="never"                   不显示在ActionBar中(默认值)
2 android:showAsAction="always"                 一定显示在ActionBar中
3 android:showAsAction="withText"              显示菜单项文字
4 android:showAsAction="ifRoom"               如果ActionBar有位置就显示
5 android:showAsAction="collapseActionView" 将该ActionView折叠成普通菜单项。最低API=14 

按钮响应事件还是onOptionsItemSelected

 1 @Override
 2     public boolean onOptionsItemSelected(MenuItem item) {
 3         switch (item.getItemId()) {
 4         case R.id.action_call:
 5             Toast.makeText(getApplicationContext(), "打电话",1).show();
 6             break;
 7         case R.id.action_camera:
 8             Toast.makeText(getApplicationContext(), "照相机",1).show();
 9             break;
10         case R.id.action_delete:
11             Toast.makeText(getApplicationContext(), "删除",1).show();
12             break;
13         case R.id.action_help:
14             Toast.makeText(getApplicationContext(), "帮助",1).show();
15             break;
16 
17         default:
18             break;
19         }
20         
21         
22         return super.onOptionsItemSelected(item);
23     }

效果图:

5、分割菜单栏

在API级别14以上(Android4.0),可以启用ActionBar的分隔操作栏模式,在屏幕的底部会显示一个独立的横条,用于显示Activity在窄屏或者竖屏上运行时的所有操作项 但是只是在底部显示所有的操作项,而导航条和标题元素依然留在顶部

在<application>或<activity>元素中添加uiOptions=”splitActionBarWhenNarrow”属性设置

 1 <application
 2         android:allowBackup="true"
 3         android:icon="@drawable/ic_launcher"
 4         android:label="@string/app_name"
 5         android:theme="@style/AppTheme" >
 6         <activity
 7             android:name=".MainActivity"
 8             android:uiOptions="splitActionBarWhenNarrow"
 9             android:label="@string/app_name" >
10             <intent-filter>
11                 <action android:name="android.intent.action.MAIN" />
12 
13                 <category android:name="android.intent.category.LAUNCHER" />
14             </intent-filter>
15         </activity>
16     </application>

效果图:

三、ActionBarTab.导航选项标签

你想要在一个Activity中提供导航选择标签时,使用操作栏的选项标签是一个非常好的选择,因为系统会调整操作栏选项标签来适应不同尺寸的屏幕的需要---在屏幕足够宽的时候,导航选项标签会被放到主操作栏中;当屏幕太窄的时候,选项标签会被放到一个分离的横条中

               当宽度有足够的位置时,导航选项标签会被放到主操作栏中;

 当屏幕太窄的时候,选项标签会被放到一个分离的横条中

创建导航标签步骤

* 使用ActionBar的Tab导航 * 1、设置ActionBar的导航模式为TABS * 2、当前Activity实现ActionBar.TabListener接口(Tab的选择与取消等事件) * 3、通过ActionBar类对象的newTab()来创建选项卡,同时设置显示的标题和事件监听 * 4、通过ActionBar类对象的addTab()方法,将创建的Tab增加到ActionBar中 * 5、设置ActionBar选择事件监听

看一个Demo ,

设置四个导航标签,点击一个导航标签,显示对应的Fragment

 1 import android.app.ActionBar;
 2 import android.app.ActionBar.Tab;
 3 import android.app.ActionBar.TabListener;
 4 import android.app.Activity;
 5 import android.app.FragmentTransaction;
 6 import android.os.Bundle;
 7 import android.view.Menu;
 8 
 9 public class MainActivity extends Activity implements TabListener {
10 
11     private ActionBar actionBar;
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         
18         //不要忘记这两行,设置ActionBar的导航模式为TABS
19         actionBar = getActionBar();
20         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
21         
22         initTab();
23     }
24 
25     private void initTab() {
26         // TODO Auto-generated method stub
27         actionBar.addTab(actionBar.newTab().setText("热点").setTabListener(this));
28         actionBar.addTab(actionBar.newTab().setText("军事").setTabListener(this));
29         actionBar.addTab(actionBar.newTab().setText("国内").setTabListener(this));
30         actionBar.addTab(actionBar.newTab().setText("国外").setTabListener(this));
31     }
32 
33     @Override
34     public void onTabReselected(Tab tab, FragmentTransaction ft) {
35         // TODO Auto-generated method stub
36         
37     }
38 
39     @Override
40     public void onTabSelected(Tab tab, FragmentTransaction ft) {
41         // TODO Auto-generated method stub
42         //当ActionBar中某一Tab被选择,执行此方法,此时显示此Tab对应的Fragment
43         ContentFragment cf = ContentFragment.newInstance(tab.getText().toString());
44         ft.replace(R.id.showfragment, cf);
45         
46     }
47 
48     @Override
49     public void onTabUnselected(Tab tab, FragmentTransaction ft) {
50         // TODO Auto-generated method stub
51         
52     }
53     
54     @Override
55     public boolean onCreateOptionsMenu(Menu menu) {
56         // TODO Auto-generated method stub
57         getMenuInflater().inflate(R.menu.main, menu);
58         return super.onCreateOptionsMenu(menu);
59     }
60 }
 1 import java.util.List;
 2 
 3 import android.app.ListFragment;
 4 import android.os.Bundle;
 5 import android.widget.ArrayAdapter;
 6 
 7 public class MyFragment extends ListFragment{
 8     
 9     private ArrayAdapter<String> adapter;
10     
11     public static MyFragment newInstance(String title)
12     {
13         MyFragment cf = new MyFragment();
14         Bundle arg = new Bundle();
15         arg.putString("title", title);
16         cf.setArguments(arg);
17         return cf;
18         
19     }
20     
21     @Override
22     public void onCreate(Bundle savedInstanceState) {
23         // TODO Auto-generated method stub
24         super.onCreate(savedInstanceState);
25         //给适配器添加数据
26         adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
27         String title = getArguments().getString("title").toString();
28         for(int i=0;i<30;i++)
29         {
30             adapter.add(title+" "+i);
31         }
32         
33         
34     }
35     
36     @Override
37     public void onActivityCreated(Bundle savedInstanceState) {
38         // TODO Auto-generated method stub
39         super.onActivityCreated(savedInstanceState);
40         //给内置ListView设置适配器,一定要在onCreat()方法之后执行,因为在onCreat方法之后View才被创建
41         setListAdapter(adapter);
42         
43     }
44     
45 
46 }
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11   <FrameLayout 
12       android:layout_width="match_parent"
13       android:layout_height="match_parent"
14       android:id="@+id/showfragment"
15       ></FrameLayout>
16 </RelativeLayout>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-12-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档