FragmentTabHost使用方法详解

发布时间:2020-08-19 23:32:55

来源:脚本之家

阅读:171

作者:mChenys

FragmentTabHost是support-v包下提供的用于集成和管理Fragment页面的组件.

今天要实现的效果图如下:

整体结构是MainActivity+5个模块的Fragment.

MainActivity的布局如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/real_tabcontent"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"/>

android:id="@android:id/tabhost"

android:layout_width="match_parent"

android:layout_height="wrap_content"

>

android:id="@android:id/tabcontent"

android:layout_width="0dp"

android:layout_height="0dp"

android:layout_weight="0"/>

每个tab的布局如下:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/iv_tab"

android:layout_width="26dp"

android:layout_height="26dp"

/>

android:id="@+id/tv_tab"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="1dp"

android:textSize="12sp"/>

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;

}

}

最后附上字体选择器

图片选择器有5个,这里附上一个,其他类似:

xmlns:android="http://schemas.android.com/apk/res/android">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。

android tabhost 分割线,FragmentTabHost使用方法详解相关推荐

  1. android 多闹钟实现代码,Android编程实现闹钟的方法详解

    Android编程实现闹钟的方法详解 发布时间:2020-09-30 10:18:02 来源:脚本之家 阅读:75 作者:Jacob-wj 本文实例讲述了Android编程实现闹钟的方法.分享给大家供 ...

  2. Android之TelephonyManager类的方法详解

    林计钦-JAVA java技术群:127834248 博客园   首页   社区   新随笔   联系   订阅   管理 随笔-105  评论-24  文章-0  trackbacks-0 Andr ...

  3. android 编程 闹钟,Android编程实现闹钟的方法详解

    本文实例讲述了Android编程实现闹钟的方法.分享给大家供大家参考,具体如下: 在Android中,有一个闹钟的类,AlarmManager类,我们可以通过其来对系统内的通知进行操作! 本文用到了S ...

  4. Android Gallery控件使用方法详解

    我们今天给大家讲的就是Gallery控件,这个控件在android当中是非常重要的,我们今天就给大家介绍一下3D的Gallery控件是怎么样来实现的.下面我们就来直接看看代码吧. 1.扩展Galler ...

  5. android网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列     ...

  6. 5种方法完美解决android软键盘挡住输入框方法详解

    版权声明:本文为CSDN博主「潇潇凤儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/smileiam/ ...

  7. android 低内存方法,android onLowMemory低内存回调方法详解

    onLowMemory方法顾名思义就是在app内存低的时候回调,那么怎样才是内存低的标准,回调流程又是如何?我们一起带着问题去看源代码解析. onLowMemory方法在Activity,Servie ...

  8. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

  9. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

最新文章

  1. C语言字符串大小写转换_只愿与一人十指紧扣_新浪博客
  2. mybatis整合ehcache
  3. IE滤镜实现透明度/阴影/渐变等特效
  4. 假笨说-从一起GC血案谈到反射原理
  5. QQ病毒越来越人性化了
  6. C++ 学习基础篇(一)—— C++与C 的区别
  7. simulink学习仿真(微分模块、传递函数模块使用、波特图频率特性)day3
  8. 经典按键java手机游戏_菜鸟也能轻松吃鸡的神器——莱仕达P30S手机游戏手柄体验...
  9. Mars-Android开发视频教程(全集)
  10. spss多元线性回归散点图_利用SPSS进行线性回归分析
  11. 选用什么云服务器做编程学习比较好?
  12. 统一社会信用代码校验和生成
  13. Windows 服务器使用FTP出现“当前的安全设置不允许从该位置下载文件 警告
  14. Elasticsearch通过_update_by_query和script批量修改文档
  15. 用matlab画三叶玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
  16. steam上的异形扫雷游戏tametsi技巧
  17. keep 虚拟路线修改器_二次元出圈搞综艺,杨颖、虞书欣、小鬼打造二次元虚拟偶像...
  18. 飞利浦与联合利华签署2021年度战略合作备忘录;3M推出全新即时除菌擦拭布 | 美通企业日报...
  19. 如何利用Flutter框架开发运行小程序
  20. 赛迪智库:政务数据不愿共享的成因及对策

热门文章

  1. win10计算机记录,如何在win10上记录计算机屏幕,如何在win10上记录屏幕
  2. java.net.UnknownHostException 异常处理(个人案例)
  3. 《象与骑象人听书笔记》
  4. 一世12年龄在泥土还在打,硅谷00创业毕竟开始播放!
  5. GuiLite 2.0 发布:Golang 的 GUI 外衣
  6. 视觉设计人员必备-网址篇(持续完善中)
  7. spring cloud 2020
  8. drat中const和final
  9. 水果怎么画?橘子怎么画?橙子怎么画?
  10. 模型描边(一)—— three.js后期处理实现