FragmentTabHost 的使用mark

之前的项目使用的底部tab导航都是RadioGroup,最近看到一个Demo里用的是FragmentTabHost,貌似代码更简洁,逻辑更简单。遂拿来试试,希望好奇心不要害死猫。
布局文件里引入控件,v4包下提供支持。

<android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom" />

其上部放置一个FrameLayout作为fragment的容器。

 <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="1.0"
            android:background="@color/background_color" />

Activity的onCreate方法中初始化,并指定tab数量、tab的图标、名称和对应的fragment

 Indicator[] indicators = Indicator.values();
        mFragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mFragmentTabHost.setup(getApplicationContext(), fragmentManager, R.id.fragment_container);

        //初始化Tab
        for (int i = 0; i < indicators.length; i++){
                    TabHost.TabSpec tabSpec =     mFragmentTabHost.newTabSpec(getString(indicators[i].getResName()));
            tabSpec.setIndicator(getIndicatorView(indicators[i]));
            mFragmentTabHost.addTab(tabSpec, indicators[i].getClz(), null);
        }

Indicator是什么鬼?是对Tab的内容的封装

public enum Indicator {

    FIRST(0, R.string.tab_name1, R.drawable.tab_icon_review,
            FirstFragment.class),

    SECOND(1, R.string.tab_name2, R.drawable.tab_icon_test,
            SecondFragment.class),

    THIRD(2, R.string.tab_name3, R.drawable.tab_icon_other,
            ThirdFragment.class);

    private int idx;
    private int resName;
    private int resIcon;
    private Class<?> clz;

    private Indicator(int idx, int resName, int resIcon, Class<?> clz) {
        this.idx = idx;
        this.resName = resName;
        this.resIcon = resIcon;
        this.clz = clz;
    }

    public int getIdx() {
        return idx;
    }

    public void setIdx(int idx) {
        this.idx = idx;
    }

    public int getResName() {
        return resName;
    }

    public void setResName(int resName) {
        this.resName = resName;
    }

    public int getResIcon() {
        return resIcon;
    }

    public void setResIcon(int resIcon) {
        this.resIcon = resIcon;
    }

    public Class<?> getClz() {
        return clz;
    }

    public void setClz(Class<?> clz) {
        this.clz = clz;
    }
}

那么问题来了?为什么要使用FragmentTabHost呢?
首先FragmentTabHost是谷歌官方出品,专门用来做tab的,再者,它继承自ViewGroup,我们如果想要加一个消息提示的红色数字,不需要在Layout文件里添加外层布局,可以直接指定layoutParams添加到目标位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值