4.0最大的特色就是那个带着OptionMenu的ActionBar了,之前的很多功能都整合到ActionBar中来做了
3.给每个fragment定义布局文件,这里偷懒 就都使用的一个xml
5.其实ActionBar的样式可以动态改变,可以动态切换Tab是否显示
取代之前的TabActivity 以及TabHost的ActionBar
参考例子 APIDemo中的com.example.android.apis.app.ActionBarTabs
在ActionBar中添加Tab,需要以下几步操作
1.继承并实现TabListener
public class TabListener implements ActionBar.TabListener{
Fragment mFragment;
public TabListener(Fragment fragment) {
mFragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment, mFragment); //ft.add方法还有三个参数的方法,是添加一个tag进fragment里面去,没有具体看api文档
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(mFragment);
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
2.在主Activity的布局文件中,为tab每次被选择切换的view或者是fragment留下空间
<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" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/fragment"/>
</LinearLayout>
3.给每个fragment定义布局文件,这里偷懒 就都使用的一个xml
4.在主Activity中添加Tab,并且为Tab添加监听器
final ActionBar actionBar = getActionBar();
actionBar.addTab(actionBar.newTab()
.setText(getResources().getString(R.string.derect_mode))
.setTabListener(new TabListener(new DerectModeFragement())));
actionBar.addTab(actionBar.newTab()
.setText(getResources().getString(R.string.GET_mode))
.setTabListener(new TabListener(new GetModeFragement())));
actionBar.addTab(actionBar.newTab()
.setText(getResources().getString(R.string.POST_mode))
.setTabListener(new TabListener(new PostModeFragement())));
5.其实ActionBar的样式可以动态改变,可以动态切换Tab是否显示
在ApiDemo里面 有这样的实现
if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);
} else {
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
}