[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-11-18| 标题:Android应用开发笔记:tabhost的两种实现方式|分类:编程 / android |标签:android·actionbar·actionbarsherlock·tabhost
Android应用开发笔记:tabhost的两种实现方式
- github:
- 备注:
- Android自带的FragmentTabhost:
- activity\_second.xml文件:
- SecondActivity.java文件:
- 备注:
- actionbarsherlock:
- activity\_third.xml:
- ThirdActivity.java:
- 备注:
- 附上demo的几张截图:
android界面开发中有两种实现tabhost的方式:一种是使用android自带的FragmentTabHost,另外一种是使用actionbarsherlock来实现。下面分别备份下两种的实现方式。
github:
【 https://github.com/cstriker1407/android/tree/master/HelloLibABS 】
备注:
代码比较乱,里面有很多功能。
Android自带的FragmentTabhost:
activity_second.xml文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/base"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.support.v4.app.FragmentTabHostandroid:id="@android:id/tabhost"android:layout_width="match_parent"android:layout_height="wrap_content"><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="0dp"android:layout_height="0dp"/></android.support.v4.app.FragmentTabHost></LinearLayout>SecondActivity.java文件:
publicclassSecondActivityextendsSlidingFragmentActivity{privateFragmentTabHosttabHost;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setSlidingActionBarEnabled(false);setContentView(R.layout.activity_second);setBehindContentView(R.layout.activity_leftmenu);SlidingMenusm=getSlidingMenu();sm.setBehindWidth(300);sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//从这里开始为tabhost的使用。上面为slidmenu的demotabHost=(FragmentTabHost)findViewById(android.R.id.tabhost);tabHost.setup(this,getSupportFragmentManager(),R.id.base);tabHost.addTab(tabHost.newTabSpec("left").setIndicator("dd"),LeftFrag.class,null);tabHost.addTab(tabHost.newTabSpec("right").setIndicator("xx"),RightFrag.class,null);}}备注:
- FragmentTabHost和FrameLayout的id必须设置为如上id,不能修改。
- tabhost作者没有实际使用过,只是备份下最简单的实现方式。
actionbarsherlock:
activity_third.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><FrameLayoutandroid:id="@+id/frame"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout></LinearLayout>ThirdActivity.java:
publicclassThirdActivityextendsSherlockFragmentActivityimplementsTabListener{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_third);getSupportActionBar().setDisplayShowTitleEnabled(false);getSupportActionBar().setDisplayShowHomeEnabled(false);getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);ActionBar.TabnewTab=getSupportActionBar().newTab();newTab.setText("left");newTab.setTabListener(this);getSupportActionBar().addTab(newTab);ActionBar.TabnewTab2=getSupportActionBar().newTab();newTab2.setText("right");newTab2.setTabListener(this);getSupportActionBar().addTab(newTab2);}@OverridepublicvoidonTabSelected(Tabtab,FragmentTransactionft){if(tab.getText().equals("left")){ft.replace(R.id.frame,newLeftFrag());}if(tab.getText().equals("right")){ft.replace(R.id.frame,newRightFrag());}}@OverridepublicvoidonTabUnselected(Tabtab,FragmentTransactionft){}@OverridepublicvoidonTabReselected(Tabtab,FragmentTransactionft){}}备注:
1)作者当前并没有实际使用tabhost,这里只是备份下最简单的使用方式。
附上demo的几张截图:
更新:
如果actionbarsherlock支持tabhost,那么android自带的actionbar应该也可以支持tabhost,作者没有做过实现,不过猜想API应该和sherlock差不多。