安卓开发_浅谈Action Bar

简介: 一、Action Bar 导航栏。是3.0之后出现的。 所以注意使用的时候清单文件要设置下  android:minSdkVersion="11"(至少11)   但如果使用v4包,则不需修改 二、ActionBar常用操作 1、删除Action Bar 因为3.

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

 

可以看出和以前创建菜单项的时候 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 }
MainActivity
 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 }
MyFragment
 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>
layout

 

相关文章
|
30天前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
30天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
98 1
|
6天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
5天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
18 5
|
3天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
5天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
16 3
|
7天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
1月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
58 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
13天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
42 5
|
12天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!