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