安卓开发_浅谈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

 

相关文章
|
6天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
8天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
10天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
8天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
9天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
21 2
|
10天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
18天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
17天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
28 5
|
15天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
16天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
34 3