关于那个问题:是关于如何生成如下图所示之ActionBar效果:
其实就在官网上就有答案,自己疏忽再加上资料繁多。寻了许久,经过指点。终于找到:
To enable split action bar, simply add uiOptions="splitActionBarWhenNarrow" to your <activity> or <application> manifest element.(http://developer.android.com/guide/topics/ui/actionbar.html)Using split action bar 标题下。
如果你想拥有上图的那种效果,Fragment(关于Fragment的内容,见上篇)在menuItem的下面显示,在manifest.xml文件里在<activity>或者<application>里加上uiOptions="splitActionBarWhenNarrow" 即可。
注:本人在4.0版本平板上不能达到此效果,在4.0手机上可以实现。在平板上,效果类似如下:
,如果fragment增多,不会分裂出现上图效果,而使用下拉列表来显示Fragment。
下面开始正题。
简介
ActionBar是一个显示在屏幕顶部的控件,它包括了在左边显示的应用的logo图标和右边操作菜单的可见项。
我们可以选择可见的操作菜单可见项,不可见项会以下拉列表的形式呈现出来。(见上图相机图标右侧,点击出现下拉列 表,显示没有直接显示出来的操作菜单可见项)
ActionBar为Fragment之间提供标签导航
添加ActionBar
不需要导入ActionBar,因为在android3.0或者以上版本中,ActionBar已经默认的包含在Activity中
在Android3.0的默认主题“holographic”中,已经创造了ActionBar
当android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高时,应用会被认为是Android3.0版本(默认含有ActionBar)
去除ActionBar
我们可以通过把主题设置为Theme.Holo.NoActionBar为一个Activity去除掉ActionBar。 <activity android:theme="@android:style/Theme.Holo.NoActionBar">
我们也可以通过在代码中调用show()或者hide()方法来相应的显示或者隐藏ActionBar
添加Action Item
每一个操作菜单的菜单项都可以成为ActionBar中的一个Action Item.
Demo : ActionBarDemoActivity.java


package com.example.actionbardemoactivity; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ActionBarDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_action_bar_demo); Button showBt = (Button) findViewById(R.id.showBt); showBt.setOnClickListener(new OnClickListener() { @SuppressLint("NewApi") public void onClick(View view) { ActionBar actionBar = getActionBar(); actionBar.show(); } }); } @SuppressLint("NewApi") public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem add = menu.add(0, 1, 0, "Save"); MenuItem open = menu.add(0, 2, 1, "Open"); MenuItem close = menu.add(0, 3, 2, "Close"); add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); open.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); close.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); return true; } }
activity_action_bar_demo.xml


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <Button android:id="@+id/hideBt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hide The Action Bar" > </Button> <Button android:id="@+id/showBt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show The Action Bar" > </Button> </LinearLayout>
下面通过XML来配置菜单:
新建主程序:ActionBarXMLActivity.java


package com.example.actionbarxmlactivity; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuInflater; public class ActionBarXMLActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_action_bar_xml); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.action_bar_xml, menu); //getMenuInflater().inflate(R.menu.action_bar_xml, menu); return true; } }
action_bar_xml.xml文件:


<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:orderInCategory="1" android:showAsAction="ifRoom|withText" android:title="save"/> <item android:id="@+id/item1" android:orderInCategory="2" android:showAsAction="ifRoom|withText" android:title="edit"/> <item android:id="@+id/item1" android:orderInCategory="3" android:showAsAction="ifRoom|withText" android:title="about"/> <item android:id="@+id/item1" android:orderInCategory="4" android:showAsAction="ifRoom|withText" android:title="help"/> </menu>
运行结果:
菜单项过多溢出
当创建一个ActionBar拥有太多的Action item以至于没有足够的控件来显示会在屏幕的右上角出现一个溢出菜单项,可以通过它来访问溢出部分菜单。
代码示例:
其Activity代码如上(ActionBarXMLActivity)
溢出菜单xml
主程序和前面一样
xml配置文件:


<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:orderInCategory="1" android:showAsAction="ifRoom|withText" android:title="save"/> <item android:id="@+id/item2" android:orderInCategory="2" android:showAsAction="ifRoom|withText" android:title="edit"/> <item android:id="@+id/item3" android:orderInCategory="3" android:showAsAction="ifRoom|withText" android:title="about"/> <item android:id="@+id/item4" android:orderInCategory="4" android:showAsAction="ifRoom|withText" android:title="help"/> <item android:id="@+id/item5" android:orderInCategory="5" android:showAsAction="ifRoom|withText" android:title="file"/> <item android:id="@+id/item6" android:orderInCategory="6" android:showAsAction="ifRoom|withText" android:title="run"/> <item android:id="@+id/item7" android:orderInCategory="7" android:showAsAction="ifRoom|withText" android:title="source"/> <item android:id="@+id/item8" android:orderInCategory="8" android:showAsAction="ifRoom|withText" android:title="navigate"/> <item android:id="@+id/item9" android:orderInCategory="9" android:showAsAction="ifRoom|withText" android:title="search"/> <item android:id="@+id/item10" android:orderInCategory="10" android:showAsAction="ifRoom|withText" android:title="project"/> <item android:id="@+id/item11" android:orderInCategory="11" android:showAsAction="ifRoom|withText" android:title="refactor"/> <item android:id="@+id/item12" android:orderInCategory="12" android:showAsAction="ifRoom|withText" android:title="window"/> <item android:id="@+id/item13" android:orderInCategory="13" android:showAsAction="ifRoom|withText" android:title="help"/> </menu>
ActionBar 标签
ActionBar可以现实选项卡供用户切换浏览该Activity中不同的Fragment
每个标签都可以是一个图标或文本标题
代码示例:
TabsActivity.java
[java]
public class TabsActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tabA = bar.newTab().setText("A Tab");
ActionBar.Tab tabB = bar.newTab().setText("B Tab");
ActionBar.Tab tabC = bar.newTab().setText("C Tab");
Fragment fragmentA = new AFragmentTab();
Fragment fragmentB = new BFragmentTab();
Fragment fragmentC = new CFragmentTab();
}
tabA.setTabListener(new MyTabsListener(fragmentA));
tabB.setTabListener(new MyTabsListener(fragmentB));
tabC.setTabListener(new MyTabsListener(fragmentC));
bar.addTab(tabA);
bar.addTab(tabB);
bar.addTab(tabC);
protected class MyTabsListener implements ActionBar.TabListener
{
private Fragment fragment;
public MyTabsListener(Fragment fragment)
{
this.fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
ft.add(R.id.fragment_place, fragment, null);
}
}
}
AFragmentTab.java
[java]
public class AFragmentTab extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_a, container, false);
}
}
BFragmentTab.java
[java]
public class BFragmentTab extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_b, container, false);
}
}
CFragmentTab.java
[java]
public class CFragmentTab extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_c, container, false);
}
}
main.xml
[html]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > www.2cto.com
<LinearLayout
android:id="@+id/fragment_place"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</LinearLayout>
</LinearLayout>
最后一个有点错误!