2011.09.14(3)——— android 自定义tabhost的tabs
参考:
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,否则会保持。
- 大小: 6.8 KB
- 大小: 6 KB
分享到:
相关推荐
3. **切换事件监听**:通过`TabHost.OnTabChangeListener`接口,我们可以监听用户切换Tab的操作,以便进行相应的逻辑处理,如刷新当前页面内容。 4. **嵌套Fragment**:在新的Android版本中,使用Fragment来管理每...
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { // 处理Tab切换的逻辑 } }); ``` 6. 使用自定义的TabHost布局 最后,我们需要在...
这个压缩包"安卓Android源码——ViewPager和Tabhost结合,可滑动的tabhost.rar"提供了将两者结合使用的示例代码,帮助开发者创建一个可以滑动的`TabHost`,增强用户体验。 `ViewPager` 是Android SDK中的一个强大...
- 在自定义TabIndicator时,别忘了将`TabHost.LayoutParams`设置为`WRAP_CONTENT`,以适应不同长度的标签文本。 - 自定义颜色应与应用的整体设计风格保持一致,提供良好的用户体验。 通过以上步骤,你将能够成功...
android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> android:id="@android:id/tabcontent" android:layout_width="match_parent" android:...
在某些场景下,开发者可能希望将这两者结合,实现可滑动的标签页,这正是“安卓Android源码——ViewPager和Tabhost结合,可滑动的tabhost.zip”所展示的内容。 `ViewPager` 是Android Support Library中的一个组件...
在“新浪微博布局学习——妙用TabHost.doc”文档中,可能详细介绍了如何配置和使用TabHost,包括如何自定义标签样式、处理点击事件、以及如何与其他组件如ViewPager结合等。通过学习这份资料,开发者可以深入理解...
下面我们将详细探讨如何自定义Android的TabHost,并通过具体的实现案例进行讲解。 首先,理解TabHost的基本结构是关键。TabHost通常由两部分组成:TabWidget和FrameLayout。TabWidget用于显示和管理各个标签,而...
3. **设置宿主**:调用`tabHost.setup();`,这使得TabHost能够管理其内容区域。 4. **添加标签**:对于每个标签,调用`TabSpec tabSpec = tabHost.newTabSpec("tag");`创建一个TabSpec,然后设置标签文本和图标,...
android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"/> </TabHost> ``` 3. **添加图标和文字** 在传统的`TabHost...
在Android开发中,自定义组件是提升应用独特性和用户体验的关键技术之一。本示例主要讲解如何使用自定义的Button和TabHost来实现页面间的切换,从而创建一个具有个性化标签导航功能的应用。 首先,我们来看看...
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { // 在这里处理标签切换的逻辑 } }); ``` 5. **SinaWeibo案例** 压缩包中的...
`TabWidget`的`android:id`应设为`@android:id/tabs`,`FrameLayout`的`android:id`设为`@android:id/tabcontent`。在Java代码中,我们需要找到这两个组件并将其关联到`TabHost`上。 为了实现动态加载和切换`...
在Android开发中,`TabHost`是一个非常重要的组件,它用于创建具有多个“标签”(tabs)的应用界面,每个标签代表一个不同的活动或视图。`TabHost`提供了用户友好的交互方式,允许用户通过点击标签在不同内容之间...
这个压缩包"安卓Andriod源码——ViewPager和Tabhost结合,可滑动的tabhost.zip"显然是一个示例项目,展示了如何将两者结合,创建一个可滑动的TabHost,提升用户体验。下面我们将详细讨论这两个组件以及它们的结合...
TabSpec spec3 = tabHost.newTabSpec("标签3"); spec3.setIndicator("标签3", getResources().getDrawable(R.drawable.ic_tab3)); spec3.setContent(R.id.tab3_content); tabHost.addTab(spec1); tabHost.addTab...
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { // 在这里处理Tab切换事件 } }); tabHost.setCurrentTab(0); // 设置默认选中的...
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { if ("tab1".equals(tabId)) { // 处理标签1被选中的逻辑 } else if ("tab2"....