现在不推荐使用TabHosts,如何在Android中实现标签?

时间:2015-02-07 15:02:10

标签: android android-fragments tabs instagram

我正在尝试使用与 Instagram应用类似的外观和感觉来实现五个标签。现在禁用TabHost和TabActivity的最佳做法是什么?

我希望在屏幕顶部(操作栏下方)有五个选项卡,每个选项卡都有一个表示该选项卡内容的drawable。

由于将始终显示选项卡,因此我希望将它们放在一个活动中。但是,每个选项卡的内容将取决于哪个选项卡已被按下。因此,我希望在我加载片段的选项卡下面的同一个Activity中有一个视图,一次一个,具体取决于按下哪个。

总结一下: 我想要一个活动,顶部有标签,下面有一个视图,我一次只加载一个五个不同的片段

请帮助我在不使用弃用类的情况下实现这一目标:)

2 个答案:

答案 0 :(得分:1)

您可以使用这两个新类来创建标签SlidingTabLayoutSlidingTabStrip,您必须将带有一些片段的ViewPager传递给此类,以便在每个标签页上使用setCustomTabView自定义视图。你可以找到谷歌的例子。

编辑:

对于自定义布局(我的包含图像和文本)设置您的标签,如下所示:

slideTab = (SlidingTabLayout) findViewById(R.id.getbook_sliding_tabs);
slideTab.setDistributeEvenly(true);
slideTab.setCustomTabView(R.layout.cat_tab_layout, R.id.main_tab_title);

cat_tab_layout

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="6dip"
    android:background="@drawable/cat_tab_background">

    <ImageView
        android:id="@+id/main_tab_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/cat_all_book_icon"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:id="@+id/main_tab_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="tab1"
        android:textColor="@color/medium_gray"
        android:layout_below="@id/main_tab_image"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

populateTabStrip()表单SlidingTabLayout类中进行一些更改:

adapter = (GetBookFragmentPagesAdapter)mViewPager.getAdapter();// get your view pager adapter
for (int i = 0; i < adapter.getCount(); i++) {
....
if (mTabViewLayoutId != 0) {
    // If there is a custom tab view layout id set, try and inflate it
    tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false);
    tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);

    ImageView tabImage = (ImageView)tabView.findViewById(R.id.main_tab_image);
    tabImage.setImageResource(adapter.getImages(i)); // getImage() return image id for each tab

}

...

然后你会得到这样的东西:

enter image description here

答案 1 :(得分:0)

  

我正在尝试使用与Instagram应用程序类似的外观和感觉来实现五个选项卡

由于不是每个人都使用Instagram,将来,请发布你想要的截图,并从你的问题链接到它。

  

我希望有一个活动,顶部有标签,下面有一个视图,我一次加载五个不同的碎片中的一个。

Use FragmentTabHost。或者,使用ViewPager和标签式指标(例如,TabPageIndicatorthe ViewPagerIndicator library中的IconPagerAdapter一起使用。