2011.09.14(3)——— android 自定義tabhost的tabs
參考: http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html
我們直接用系統(tǒng)的tabhost時(shí) 如下圖
可以看見 兩個(gè)tab中間有空隙 也許我們不需要這些空隙或者系統(tǒng)的樣式 但是沒有相關(guān)的xml屬性來(lái)修改 所以我們可以自定義tabs
效果如下圖 可以看見 沒有了中間的空隙
我們用單選按鈕來(lái)實(shí)現(xiàn)tabs
1、看布局文件
關(guān)鍵 在于 TabWidget里面
2、代碼
主要是三個(gè)方法:
初始化Tabhost
初始化RadioButton
設(shè)置切換事件
??
1. 由于TabWidget被隱藏,所以相關(guān)的事件也會(huì)無(wú)效,這里取巧用RadioGroup與RadioButton的特性來(lái)處理切換,然后監(jiān)聽事件調(diào)用setCurrentTabByTag來(lái)切換Activity。
2. 注意即使TabWidget被隱藏,也要為其設(shè)置indicator,否則會(huì)保持。
參考: http://www.cnblogs.com/over140/archive/2011/03/02/1968042.html
http://www.iteye.com/topic/1116261
我們直接用系統(tǒng)的tabhost時(shí) 如下圖
可以看見 兩個(gè)tab中間有空隙 也許我們不需要這些空隙或者系統(tǒng)的樣式 但是沒有相關(guān)的xml屬性來(lái)修改 所以我們可以自定義tabs
效果如下圖 可以看見 沒有了中間的空隙
我們用單選按鈕來(lái)實(shí)現(xiàn)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>
關(guān)鍵 在于 TabWidget里面
android:visibility = "gone"
2、代碼
主要是三個(gè)方法:
初始化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);
}
設(shè)置切換事件
??
@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被隱藏,所以相關(guān)的事件也會(huì)無(wú)效,這里取巧用RadioGroup與RadioButton的特性來(lái)處理切換,然后監(jiān)聽事件調(diào)用setCurrentTabByTag來(lái)切換Activity。
2. 注意即使TabWidget被隱藏,也要為其設(shè)置indicator,否則會(huì)保持。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

