本文介绍ActionBar。主要包括:ActionBar的基本用法,如何隐藏ActionBar,ActionBar的向上导航功能,以及使用使用ActionBar的Tab。
ActionBar的基本用法
点击查看:ActionBar的基本用法完整代码
ActionBar和Menu的基本用于差不多,毕竟Menu通常是依附于ActionBar之上的。所以,使用ActionBar也需要在manfest中添加相关主题。例如:
android:theme="@android:style/Theme.Holo"
当然,也可以是"@android:style/Theme.Holo"的子主题。
1. 定义menu菜单
新建res/menu/menu.xml,内容如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- search -->
<item android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"
android:showAsAction="ifRoom" />
<!-- setting -->
<item android:id="@+id/setting"
android:title="@string/setting"
android:showAsAction="ifRoom|withText" />
<!-- share -->
<item android:id="@+id/share"
android:icon="@drawable/ic_action_share"
android:title="@string/share"
android:showAsAction="ifRoom" />
</menu>
2. 覆盖onCreateOptionsMenu()
在onCreateOptionsMenu()中展开菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
3. 响应菜单点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search:
Toast.makeText(getApplicationContext(), "search", 0).show();
return true;
case R.id.setting:
Toast.makeText(getApplicationContext(), "setting", 0).show();
return true;
case R.id.share:
Toast.makeText(getApplicationContext(), "share", 0).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
隐藏ActionBar
点击查看:隐藏ActionBar的完整代码
通常有两种方式隐藏ActionBar。
1. 通过主题来隐藏ActionBar
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
2. 通过代码来隐藏
ActionBar actionBar = getActionBar();
actionBar.hide();
ActionBar向上导航
点击查看:ActionBar向上导航的完整代码
1. 显示向上导航
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
2. 向上导航处理
向上导航对应的id是"android.R.id.home"。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
...
case android.R.id.home:
Toast.makeText(getApplicationContext(), "home!", 0).show();
this.finish();
return true;
...
}
}
ActionBar的Tab
点击查看:ActionBarMenu的完整代码
1. 新建Tab所需要的Fragment
Fragment对应的类:
public class FragA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag_a, container, false);
}
}
Fragment对应的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/intro_fragA" />
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/send"
android:onClick="sendMessage" />
</LinearLayout>
2. 新建Tab并进行相关设置
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取ActionBar
ActionBar bar = getActionBar();
// 设置ActionBar模式
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 创建Fragment
Fragment fragmentA = new FragA();
Fragment fragmentB = new FragB();
Fragment fragmentC = new FragC();
// 新建3个Tab,并将这三个TAB添加到ActionBar中。
// (01) setText()是设置标题
// (02) setIcon()是设置图标
// (02) setTabListener()是设置Tab监听器
Tab tabA = bar.newTab().setText("A Tab").setIcon(R.drawable.ic_action_call).setTabListener(new MyTabListener(fragmentA));
Tab tabB = bar.newTab().setText("B Tab").setIcon(R.drawable.ic_action_mail).setTabListener(new MyTabListener(fragmentB));
Tab tabC = bar.newTab().setText("C Tab").setIcon(R.drawable.ic_action_video).setTabListener(new MyTabListener(fragmentC));
bar.addTab(tabA);
bar.addTab(tabB);
bar.addTab(tabC);
}
说明:上面新建了3个Tab,并将这3个Tab添加到ActionBar中。每一个Tab都对应一个Fragment,在点击Tab时,我们显示当前被点击Tab的Fragment。
class MyTabListener implements TabListener{
private Fragment fragment;
public MyTabListener(Fragment fragment){
this.fragment=fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (ft!=null) {
ft.add(R.id.frag, fragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (ft!=null) {
ft.remove(fragment);
}
}
}