首先吐槽下官网,http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html ,这里居然没给出xml的配置,导致一直弄了很久。而百度搜索到的大部分都是这个配置,不只是否是版本升级的原因,我按照这个配置,运行就会报错:java.lang.RuntimeException: Your TabHost must have a FrameLayout whose id attribute is 'android.R.id.tabcontent'
各种尝试,最后发现只有下面这个代码能运行,但是tabs是在顶部的
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> </android.support.v4.app.FragmentTabHost> </LinearLayout>
最后只好谷歌了,发现了国外的大神的一个配置,就是FragmentTabHost里面什么都没放置。下面是我自己写的配置,
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 把FragmentLayout放在FragmentTabHost上面,这样tabs就在底部了,注意,id要自己添加了 android:id="@+id/realtabcontent" --> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="150px" > </android.support.v4.app.FragmentTabHost> </LinearLayout>
下面是MainActivity.java的代码
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; import android.view.View; import android.widget.LinearLayout; import com.dzc.talkv3.R; import com.dzc.talkv3.fragment.ContactFragment; public class MainActivity extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.activity_main1); //初始化tabs initTabs(); } private void initTabs(){ mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); //初始化4个tabs界面 //R.layout.main_bottom_bar_tab_msg 自己定义的tabs布局文件 一个Linearlayout里面放一个View组件就行了 View tab_msg = getLayoutInflater().inflate(R.layout.main_bottom_bar_tab_msg, null); View tab_contact = getLayoutInflater().inflate(R.layout.main_bottom_bar_tab_contact, null); View tab_plugin = getLayoutInflater().inflate(R.layout.main_bottom_bar_tab_plugin, null); View tab_me = getLayoutInflater().inflate(R.layout.main_bottom_bar_tab_me, null); //addTab(标题,跳转的Fragment,传递参数的Bundle) //ContactFragment自己定义一个extends Fragment的类就行了 mTabHost.addTab(mTabHost.newTabSpec("").setIndicator(tab_msg), ContactFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("").setIndicator(tab_contact), ContactFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("").setIndicator(tab_plugin), ContactFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("").setIndicator(tab_me), ContactFragment.class, null); //设置tabs之间的分隔线不显示 mTabHost.getTabWidget().setShowDividers(LinearLayout.SHOW_DIVIDER_NONE); } } 这是效果图
<!--StartFragment -->
相关推荐
在Android应用开发中,创建一个类似QQ底部导航栏的功能,通常涉及到`FragmentTabHost`、`Fragment`以及自定义视图的设计。`FragmentTabHost`是Android提供的一个用于在TabLayout中管理Fragment的组件,而右上角的...
在Android开发中,TabHost是一个非常重要的组件,它主要用于创建具有多个Tab标签的用户界面,每个标签页可以关联一个不同的Activity或Fragment。在Android 4.0(API级别14)时代,TabHost仍然是实现多标签布局的主要...
ActionBar 是 Android 4.0 (API 级别 14) 引入的一个新特性,它替代了传统的标题栏 (title bar),并提供了一个更丰富、更灵活的界面控件,用于整合应用的基本导航和辅助功能。ActionBar 出现在 Activity 的顶部,...
Android CustomTabs Chrome CustomTabs for Android demystified. Simplifies development and provides higher level classes including fallback in case Chrome isn't available on device. Usage How to ...
在Android应用开发中,模拟QQ主界面是一项常见的需求,它涉及到UI设计、用户交互以及一些高级组件的使用。本项目“Android仿QQ主界面——完善篇”旨在通过具体工程代码,帮助开发者掌握如何构建类似QQ的多页面滑动...
TabHost是Android SDK提供的一种用于构建多标签界面的容器,它可以帮助我们组织多个活动(Activities)或者碎片(Fragments)在一个单一的视图中。下面我们将详细介绍如何使用TabHost来实现Android底部菜单栏的仿...
在Android应用开发中,底部导航栏(Bottom Navigation)是一种常见的设计模式,用于在多个顶级目的地之间切换。`PagerBottomTabStrip`是一个开源组件,专为快速构建这样的底部导航栏而设计,尤其适用于Android ...
在Android应用开发中,创建一个类似微信的底部选项卡是常见的需求,这为用户提供了一种直观的方式来导航不同的功能模块。本教程将详细讲解如何在Android中实现这样的功能,特别是实现可滑动和点击切换的底部选项卡。...
在Android应用开发中,选项卡(Tabs)是一种常见的界面元素,用于展示多个相互关联的内容区域。本项目"TabsDemo"提供了一个自定义实现选项卡的示例,它使用了ScrollView和ViewPager来创建一个灵活且可滚动的选项卡布局...
Android tabs at bottom! This repository contains sample of setting android TabLayout at bottom and showing Fragment embedded in ViewPager. The magic happens very simply. You need to arrange them ...
FragmentTabHost是Android SDK提供的一种用于在Activity中管理多个Fragment并显示在底部标签栏的组件。在这个场景下,我们要讨论的是如何在FragmentTabHost中实现中间按钮的凸出效果,这将使应用的界面更具吸引力和...
在Android应用开发中,设计美观且易于使用的用户界面是至关重要的。`EasyTabs`库就是为了帮助开发者快速、简便地创建自定义...通过掌握`EasyTabs`的使用,您可以在Android应用中创建出具有吸引力和功能性的选项卡界面。
在Android应用开发中,底部导航栏(通常称为选项卡)是一种常见的用户界面设计模式,用于在多个视图间切换,提供清晰的导航结构。本文将深入探讨如何在Android中实现一个底部导航栏实例,主要涉及`TabWidget`的使用...
在Android应用开发中,BottomNavigationView是一种常用的组件,用于在底部展示多个可切换的视图,类似于底部导航栏。本教程将详细介绍如何在Android Studio中利用BottomNavigationView实现底部tabs功能。 首先,...
在Android应用开发中,BottomNavigationView是一种常用的组件,用于在底部展示多个可切换的视图,类似于底部导航栏。本教程将深入探讨如何在Android Studio中使用BottomNavigationView来创建底部tabs,这是系列教程...
5. 返回和向上操作的统一:在Android 4.0中,返回按钮被置于虚拟导航栏中,并根据用户查看界面的历史记录以时间倒序方式链接界面。向上按钮则位于操作栏左侧,用于返回上一级界面。这一设计帮助用户在多层级界面中...
在Android应用开发中,底部导航菜单栏(Bottom Navigation Bar)是一种常见的用户界面设计,它允许用户在多个顶级操作之间快速切换。TabHost是Android SDK提供的一种实现底部导航栏的组件,它可以帮助开发者创建多...
本篇文章将详细讲解如何在Android中实现一个自定义的ActionBar,其风格模仿流行的QQ应用。 首先,我们需要了解Android的Activity和Theme。在AndroidManifest.xml文件中,我们为我们的Activity指定一个主题。自定义...
本教程将详细讲解如何在Android中实现“android仿UC底部Tab并且带标题栏”的功能。 首先,我们需要了解TabHost组件,它是Android系统提供的用于实现多Tab切换的容器。TabHost可以与一个FrameLayout或者一个...
在Android应用开发中,"FragmentTabHost"是一个用于在Fragment之间切换的组件,常用于实现类似社交媒体应用底部导航菜单的功能。这种设计模式可以提供多标签的界面,让用户在不同的功能模块间轻松切换,如微博、微信...