FragmentTabHost是support-v包下提供的用于集成和管理Fragment页面的组件.
今天要实现的效果图如下:
整体结构是MainActivity+5个模块的Fragment.
MainActivity的布局如下:
<?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"> <!--真正的内容视图,用于展示Fragment--> <FrameLayout androID:ID="@+ID/real_tabcontent" androID:layout_wIDth="match_parent" androID:layout_height="0dp" androID:layout_weight="1"/> <!--tabhost,必须使用系统的ID--> <androID.support.v4.app.FragmentTabHost androID:ID="@androID:ID/tabhost" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" > <!--tabcontent,必须使用系统的ID--> <FrameLayout androID:ID="@androID:ID/tabcontent" androID:layout_wIDth="0dp" androID:layout_height="0dp" androID:layout_weight="0"/> </androID.support.v4.app.FragmentTabHost></linearLayout>
每个tab的布局如下:
<?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="wrap_content" androID:gravity="center" androID:orIEntation="vertical"> <!--tab图片--> <ImageVIEw androID:ID="@+ID/iv_tab" androID:layout_wIDth="26dp" androID:layout_height="26dp" /> <!--tab名字--> <TextVIEw androID:ID="@+ID/tv_tab" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="1dp" androID:textSize="12sp"/></linearLayout>
MainActivity代码如下:
package blog.csdn.net.mchenys.bsbdj.modul.main;import androID.content.res.colorStateList;import androID.os.Bundle;import androID.support.v4.app.FragmentTabHost;import androID.text.TextUtils;import androID.vIEw.VIEw;import androID.Widget.ImageVIEw;import androID.Widget.TabHost;import androID.Widget.TextVIEw;import blog.csdn.net.mchenys.bsbdj.R;import blog.csdn.net.mchenys.bsbdj.common.base.BaseActivity;import blog.csdn.net.mchenys.bsbdj.modul.attention.vIEw.AttentionFragment;import blog.csdn.net.mchenys.bsbdj.modul.essence.vIEw.EssenceFragment;import blog.csdn.net.mchenys.bsbdj.modul.mine.vIEw.mineFragment;import blog.csdn.net.mchenys.bsbdj.modul.newpost.vIEw.NewpostFragment;import blog.csdn.net.mchenys.bsbdj.modul.publish.vIEw.PublishFragment;import blog.csdn.net.mchenys.bsbdj.mvp.presenter.impl.MvpBasePresenter;/** * Created by mChenys on 2016/5/27. */public class MainActivity extends BaseActivity { //定义数组来存放tab的图片选择器 private int[] mTabImage = {R.drawable.main_bottom_essence_selector,R.drawable.main_bottom_latest_selector,R.drawable.main_bottom_writeposts_selector,R.drawable.main_bottom_news_selector,R.drawable.main_bottom_my_selector}; //tab选项卡的文字 private String[] mTabTitle = {"精华","新帖","","关注","我的"}; //每个tab对应的Fragment的字节码对象 private Class[] fragmentArray = {EssenceFragment.class,NewpostFragment.class,PublishFragment.class,AttentionFragment.class,mineFragment.class}; @OverrIDe protected boolean isHomePage() { return true; } @OverrIDe public Integer getLayoutResID() { return R.layout.activity_main; } @OverrIDe public voID initVIEw() { //获取tabhost FragmentTabHost tabHost = (FragmentTabHost) findVIEwByID(androID.R.ID.tabhost); //绑定tabContent tabHost.setup(this,getSupportFragmentManager(),R.ID.real_tabcontent); //去掉分割线 tabHost.getTabWidget().setdivIDerDrawable(null); for (int i = 0; i < fragmentArray.length; i++) { //绑定Fragment,添加到的FragmentTabHost //设置tab的名称和vIEw TabHost.TabSpec tabSpec = tabHost. newTabSpec(mTabTitle[i]). setIndicator(getTabItemVIEw(i)); Bundle bundle = new Bundle(); bundle.putString("Title",mTabTitle[i]); //添加tab和关联对应的fragment tabHost.addTab(tabSpec,fragmentArray[i],bundle); //设置tab的背景色 tabHost.getTabWidget(). getChildAt(i). setBackgroundcolor(getResources().getcolor(R.color.bgcolor)); } //默认选中第一个tab tabHost.setCurrentTab(0); //设置tab的切换监听 tabHost.setonTabChangedListener(new TabHost.OnTabchangelistener() { @OverrIDe public voID onTabChanged(String tabID) { //可以在这里监听tab的切换 } }); } //tab的字体选择器 colorStateList mcolorStateList; /** * 给Tab按钮设置图标和文字 */ private VIEw getTabItemVIEw(int index) { VIEw vIEw = getLayoutInflater().inflate(R.layout.vIEw_tab_indicator,null); ImageVIEw imageVIEw = (ImageVIEw) vIEw.findVIEwByID(R.ID.iv_tab); TextVIEw textVIEw = (TextVIEw) vIEw.findVIEwByID(R.ID.tv_tab); //设置图片选择器 imageVIEw.setimageResource(mTabImage[index]); //设置字体选择器 if (mcolorStateList == null) { mcolorStateList = getResources(). getcolorStateList(R.color.main_bottom_text_selector); textVIEw.setTextcolor(mcolorStateList); } //设置tab的文字 if (TextUtils.isEmpty(mTabTitle[index])) { //如果没有名称,则隐藏tab下的textVIEw textVIEw.setVisibility(VIEw.GONE); } else { textVIEw.setVisibility(VIEw.VISIBLE); textVIEw.setText(mTabTitle[index]); } return vIEw; } @OverrIDe public voID initListener() { } @OverrIDe public voID initData() { } @OverrIDe public voID reLoadData() { } @OverrIDe public voID onClick(VIEw v) { } @OverrIDe public MvpBasePresenter bindPresenter() { return null; }}
最后附上字体选择器
<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item androID:state_selected="false" androID:color="@color/main_bottom_text_normal" /> <item androID:state_selected="true" androID:color="@color/main_bottom_text_select" /></selector>
图片选择器有5个,这里附上一个,其他类似:
<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item androID:state_selected="false" androID:drawable="@drawable/main_bottom_essence_normal" /> <item androID:state_selected="true" androID:drawable="@drawable/main_bottom_essence_press" /></selector>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的FragmentTabHost使用方法详解全部内容,希望文章能够帮你解决FragmentTabHost使用方法详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)