安卓开发_浅谈Action Bar

一、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>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏搞前端的李蚊子

在echarts3中使用字符云

echarts2的官方API里是带有字符云的,但到了echarts3就被从官网上移除了,想要使用的话可以从github上下载: 下载地址:https://git...

822110
来自专栏java沉淀

java生成二维码例子及Qrcode.jar包(demo小例子)

31430
来自专栏androidBlog

常用的自定义控件四(QuickBarView)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

10310
来自专栏MelonTeam专栏

深入了解layout_weight的用途

导语 :当需要某个View自动占满剩余空间,或者多个View平分空间时,你会想到使用layout_weight,但如果想按比例使用空间, 你会怎么用呢,又有什么...

20280
来自专栏我就是马云飞

直播间气泡效果

这个效果是之前看过的,正好是很典型的跟动画相关的例子,我这里就拿来跟大家分享一下,如果你以前看过又很熟悉动画那就可以略过,如果不是很熟悉或者没看过那...

29050
来自专栏蜉蝣禅修之道

android之自定义渐变颜色(二)

18420
来自专栏Hongten

java画图程序_图片用字母画出来_源码发布_版本二

在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中。

20720
来自专栏java架构师

C#对图片文件的压缩、裁剪操作初探

在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便。毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件...

35360
来自专栏Jack的Android之旅

android自定义钟表android自定义钟表

接下来就是设定这个自定义View的大小,在没有大小自适应的时候,view的高度我这位整个手机屏幕高度的三分之一,宽度为整个屏幕的宽度

11610
来自专栏Flutter&Dart

Flutter之DataTable使用详解

68930

扫码关注云+社区

领取腾讯云代金券