2011.09.14(3)——— android 自定義tabhost的tabs?
參考: http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html ?
我們直接用系統的tabhost時 如下圖?
?
可以看見 兩個tab中間有空隙 也許我們不需要這些空隙或者系統的樣式 但是沒有相關的xml屬性來修改 所以我們可以自定義tabs?
效果如下圖 可以看見 沒有了中間的空隙?
?
我們用單選按鈕來實現tabs?
1、看布局文件?
關鍵 在于 TabWidget里面?
2、代碼?
主要是三個方法:?
初始化Tabhost?
初始化RadioButton?
設置切換事件
??
1. 由于TabWidget被隱藏,所以相關的事件也會無效,這里取巧用RadioGroup與RadioButton的特性來處理切換,然后監聽事件調用setCurrentTabByTag來切換Activity。?
2. 注意即使TabWidget被隱藏,也要為其設置indicator,否則會保持。 ?
參考: http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html ?
- http: //www.iteye.com/topic/1116261 ??
我們直接用系統的tabhost時 如下圖?

可以看見 兩個tab中間有空隙 也許我們不需要這些空隙或者系統的樣式 但是沒有相關的xml屬性來修改 所以我們可以自定義tabs?
效果如下圖 可以看見 沒有了中間的空隙?

我們用單選按鈕來實現tabs?
1、看布局文件?
- <?xml?version= "1.0" ?encoding= "utf-8" ?>??
- <TabHost?xmlns:android= "http://schemas.android.com/apk/res/android" ??
- ????android:id= "@android:id/tabhost" ??
- ????android:layout_width= "fill_parent" ??
- ????android:layout_height= "fill_parent" ??
- ????android:background?=? "#d7d7d7" >??
- ????<LinearLayout?android:orientation= "vertical" ??
- ????????android:layout_width= "fill_parent" ??
- ????????android:layout_height= "fill_parent" >??
- ????????<FrameLayout?android:id= "@android:id/tabcontent" ??
- ????????????android:layout_width= "fill_parent" ??
- ????????????android:layout_height= "wrap_content" ??
- ????????????android:layout_weight?=? "1" >???????????
- ????????</FrameLayout>??????
- ??????????
- ????????<TabWidget?android:id= "@android:id/tabs" ??
- ????????????android:layout_width= "fill_parent" ??
- ????????????android:layout_height= "wrap_content" ??
- ????????????android:visibility?=? "gone" />??
- ?????????<RadioGroup?android:gravity= "right" ???
- ????????????????????android:layout_gravity= "bottom" ???
- ????????????????????android:orientation= "horizontal" ???
- ????????????????????android:id= "@+id/main_radio" ???????????????????????
- ????????????????????android:layout_width= "fill_parent" ???
- ????????????????????android:layout_height= "wrap_content" >??
- ??????????????
- ????????????<RadioButton???
- ????????????????android:id= "@+id/radio_contact" ???
- ????????????????android:layout_marginTop= "2.0dip" ??
- ????????????????android:background?=? "@drawable/tabcontact" ??
- ????????????????android:layout_width= "wrap_content" ???
- ????????????????android:layout_height= "fill_parent" ??
- ????????????????android:button=? "@null" ????????
- ????????????????/>??
- ????????????<RadioButton?android:checked= "true" ?????????????????
- ????????????????android:id= "@+id/radio_session" ???
- ????????????????android:layout_marginTop= "2.0dip" ??
- ????????????????android:background?=? "@drawable/tabsession" ??
- ????????????????android:layout_width= "wrap_content" ???
- ????????????????android:layout_height= "fill_parent" ??
- ????????????????android:button=? "@null" />????
- ????????????<RadioButton???
- ????????????????android:id= "@+id/radio_setting" ???
- ????????????????android:layout_marginTop= "2.0dip" ??
- ????????????????android:background?=? "@drawable/tabsetting" ??
- ????????????????android:layout_width= "wrap_content" ???
- ????????????????android:layout_height= "fill_parent" ??
- ????????????????android:button=? "@null" ??
- ????????????????/>?????????????????????????????????
- ????????</RadioGroup>???????????
- ????</LinearLayout>?????????
- </TabHost>??
關鍵 在于 TabWidget里面?
- android:visibility?=? "gone" ??
2、代碼?
主要是三個方法:?
初始化Tabhost?
- private ? void ?initTabHost()?{??
- ????????mTabHost?=?getTabHost();??
- ????????mTabHost.addTab(mTabHost.newTabSpec( "tab?session" ).setIndicator(??
- ???????????????? "" ).setContent( new ?Intent( this ,SessionListActivity. class )));??
- ????????mTabHost.addTab(mTabHost.newTabSpec( "tab?contact" ).setIndicator(??
- ???????????????? "" ).setContent( new ?Intent( this ,ContactListActivity. class )));??
- ????????mTabHost.addTab(mTabHost.newTabSpec( "tab?setting" ).setIndicator(??
- ???????????????? "" ).setContent( new ?Intent( this ,UserSettingActivitiy. class )));??
- ??????????
- ????????mTabHost.setCurrentTabByTag(_contactListTag);??
- ????????mTabHost.setCurrentTabByTag(_settingTag);??
- ????????mTabHost.setCurrentTabByTag(_sessionListTag);??
- ??????????
- ????}??
初始化RadioButton?
- private ? void ?initTabWidget()?{??
- ?????????((RadioButton)?findViewById(R.id.radio_session)).setOnCheckedChangeListener( this );??
- ?????????((RadioButton)?findViewById(R.id.radio_contact)).setOnCheckedChangeListener( this );??
- ?????????((RadioButton)?findViewById(R.id.radio_setting)).setOnCheckedChangeListener( this );??
- ????}??
設置切換事件
??
- @Override ??
- ??? public ? void ?onCheckedChanged(CompoundButton?buttonView,? boolean ?isChecked)?{??
- ??????? if ?(isChecked)?{??
- ??????????? switch ?(buttonView.getId())?{??
- ??????????? case ?R.id.radio_contact:??
- ??????????????? this .mTabHost.setCurrentTabByTag(_contactListTag);??
- ??????????????? break ;??
- ??????????? case ?R.id.radio_session:??
- ??????????????? this .mTabHost.setCurrentTabByTag(_sessionListTag);??
- ??????????????? break ;??
- ??????????? case ?R.id.radio_setting:??
- ???????????? this .mTabHost.setCurrentTabByTag(_settingTag);??
- ??????????????? break ;??????????????
- ???????????}??
- ???????}??
- ???}??
1. 由于TabWidget被隱藏,所以相關的事件也會無效,這里取巧用RadioGroup與RadioButton的特性來處理切換,然后監聽事件調用setCurrentTabByTag來切換Activity。?
2. 注意即使TabWidget被隱藏,也要為其設置indicator,否則會保持。 ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
