最近看到很多界面主页都差不多,决定研究研究写出来,以后直接拿来用,不做代码的轮子,多总结,多学习

还是废话少说,先上图

介绍一下我的代码:

首先是布局文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/pager"
  8. android:layout_width="match_parent"
  9. android:layout_height="0dp"
  10. android:layout_weight="1" />
  11. <android.support.v4.app.FragmentTabHost
  12. android:id="@android:id/tabhost"
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:background="@android:color/black" >
  16. <FrameLayout
  17. android:id="@android:id/tabcontent"
  18. android:layout_width="0dp"
  19. android:layout_height="0dp"
  20. android:layout_weight="0" />
  21. </android.support.v4.app.FragmentTabHost>
  22. </LinearLayout>

当然如果你想让底部的tab放在上面的话,可以把viewPager和FragmentTabHost位置换一下,以上就是主界面了,比较简单没什么好说的,给个小技巧吧,shift+ctrl+T可以查找你想要的包,例如输入viewPager,直接粘android.support.v4.view.ViewPager就可以了,比较方便

下面就是MainActivity了:

[java] view plaincopy
  1. package com.sdufe.thea.framework;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.zip.Inflater;
  5. import android.os.Bundle;
  6. import android.R.integer;
  7. import android.annotation.SuppressLint;
  8. import android.app.Activity;
  9. import android.support.v4.app.Fragment;
  10. import android.support.v4.app.FragmentActivity;
  11. import android.support.v4.app.FragmentTabHost;
  12. import android.support.v4.view.ViewPager;
  13. import android.support.v4.view.ViewPager.OnPageChangeListener;
  14. import android.view.LayoutInflater;
  15. import android.view.Menu;
  16. import android.view.View;
  17. import android.view.ViewGroup;
  18. import android.widget.ImageView;
  19. import android.widget.TabHost.OnTabChangeListener;
  20. import android.widget.TabHost.TabSpec;
  21. import android.widget.TabWidget;
  22. import android.widget.TextView;
  23. public class MainActivity extends FragmentActivity implements
  24. OnPageChangeListener, OnTabChangeListener {
  25. private FragmentTabHost mTabHost;
  26. private LayoutInflater layoutInflater;
  27. private Class fragmentArray[] = { Fragment1.class, Fragment.class,
  28. Fragment3.class, Fragment4.class };
  29. private int imageViewArray[] = { R.drawable.mywork, R.drawable.mypatient,
  30. R.drawable.infusion, R.drawable.personal };
  31. private String textViewArray[] = { "工作", "病人", "互动", "个人中心" };
  32. private List<Fragment> list = new ArrayList<Fragment>();
  33. private ViewPager vp;
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.main_tab_layout);
  38. initView();
  39. initPage();
  40. }
  41. /**
  42. * 控件初始化
  43. */
  44. private void initView() {
  45. vp = (ViewPager) findViewById(R.id.pager);
  46. vp.setOnPageChangeListener(this);
  47. layoutInflater = LayoutInflater.from(this);
  48. mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
  49. mTabHost.setup(this, getSupportFragmentManager(), R.id.pager);
  50. mTabHost.setOnTabChangedListener(this);
  51. int count = textViewArray.length;
  52. for (int i = 0; i < count; i++) {
  53. TabSpec tabSpec = mTabHost.newTabSpec(textViewArray[i])
  54. .setIndicator(getTabItemView(i));
  55. mTabHost.addTab(tabSpec, fragmentArray[i], null);
  56. mTabHost.setTag(i);
  57. }
  58. }
  59. /**
  60. * 初始化Fragment
  61. */
  62. private void initPage() {
  63. Fragment1 fragment1 = new Fragment1();
  64. Fragment2 fragment2 = new Fragment2();
  65. Fragment3 fragment3 = new Fragment3();
  66. Fragment4 fragment4 = new Fragment4();
  67. list.add(fragment1);
  68. list.add(fragment2);
  69. list.add(fragment3);
  70. list.add(fragment4);
  71. vp.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), list));
  72. }
  73. private View getTabItemView(int i) {
  74. View view = layoutInflater.inflate(R.layout.tab_content, null);
  75. ImageView mImageView = (ImageView) view
  76. .findViewById(R.id.tab_imageview);
  77. TextView mTextView = (TextView) view.findViewById(R.id.tab_textview);
  78. mImageView.setBackgroundResource(imageViewArray[i]);
  79. mTextView.setText(textViewArray[i]);
  80. return view;
  81. }
  82. @Override
  83. public boolean onCreateOptionsMenu(Menu menu) {
  84. // Inflate the menu; this adds items to the action bar if it is present.
  85. getMenuInflater().inflate(R.menu.main, menu);
  86. return true;
  87. }
  88. @Override
  89. public void onPageScrollStateChanged(int arg0) {
  90. }
  91. @Override
  92. public void onPageScrolled(int arg0, float arg1, int arg2) {
  93. }
  94. @Override
  95. public void onPageSelected(int arg0) {
  96. TabWidget widget = mTabHost.getTabWidget();
  97. int oldFocusability = widget.getDescendantFocusability();
  98. widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
  99. mTabHost.setCurrentTab(arg0);
  100. widget.setDescendantFocusability(oldFocusability);
  101. mTabHost.getTabWidget().getChildAt(arg0)
  102. .setBackgroundResource(R.drawable.selector_tab_background);
  103. }
  104. @Override
  105. public void onTabChanged(String tabId) {
  106. int position = mTabHost.getCurrentTab();
  107. vp.setCurrentItem(position);
  108. }
  109. }

代码相对来说比较简单,下面的就不贴了

源码:https://github.com/zimoguo/FragmentTabHost-ViewPager

使用FragmentTabHost和ViewPager实现仿微信主界面侧滑相关推荐

  1. Android ActionBar应用实战,高仿微信主界面的设计

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对 ...

  2. 慕课网高仿微信主界面完整代码

    微信主界面完整代码 Fragment+ViewPager实现 目录 前言 一.项目结构 二.使用步骤 前言 使用了ViewPager和Fragment的用法.支持滑屏显示界面和点击下标切换界面 . 一 ...

  3. Android jquery mobile 仿微信主界面

    效果图:       地址:http://pan.baidu.com/s/1eSupF6E 总结:只要熟悉Jquery,很快就能上手,界面效果和原生的还是有些区别,做简单的页面还是可以的. page_ ...

  4. android 仿微信demo————微信主界面实现

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  5. android 微信创建群ui,Android控件:高仿微信主UI

    高仿微信主UI 之前在Android组件:Fragment切换后保存状态 一文中讲到了Fragment切换后,是如何保存原来的状态的,最重要的就是用add方法取代现在各种教程常见的replace方法. ...

  6. android仿微信聊天功能,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  7. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...

    Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...

  8. android 微信高仿,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  9. Vue3+ElementPlus网页端聊天|vue3.0仿微信/QQ界面实例

    vue3-webchat 基于vue3.0.5开发的仿微信|QQ界面桌面端聊天实例. 运用vue3.x全家桶技术+element-plus+v3layer+v3scroll搭建的仿微信/QQ界面网页聊 ...

最新文章

  1. 【翻译】Ext JS最新技巧——2014-8-13
  2. 跟百万人一起在快手学自动驾驶,是种怎样的体验?
  3. 美团点评SQL优化工具SQLAdvisor开源
  4. python queue模块_Python的queue模块详解
  5. python中列表数据汇总和平均值_python的列表List求均值和中位数实例
  6. 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
  7. 虚拟机安装mac os x实战
  8. python-列表演练-根据学生id获取学生数据-获取学生数据中得分较高的前N条数据
  9. iOS越狱开发theOS搭建
  10. linux查看接口的命令,linux shell命令查看接口索引--ip link show
  11. python字典最大长度_支持key过期失效和限制字典大小的开源项目 [python expire max length]...
  12. Android Studio右下角显示当前branch名称不一致
  13. Alex Fung魔方解法学习记
  14. linux dhcpv6有状态配置,翻译:IPv6地址自动配置:有状态和无状态的区别
  15. bbys_tu_2016
  16. 【正点原子MP157连载】第四十三章 外置RTC芯片PCF8563实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  17. 虚拟化+docker概念基本介绍
  18. 【微信小程序】协同工作与发布
  19. C语言控制桌面背景图
  20. 2020届校招算法岗面经汇总

热门文章

  1. 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )
  2. 【FluidSynth】SoundFont 音源文件资料收集 ( SoundFont 规范 | SoundFont 音源下载 | SoundFont 编辑器 | 博客资源 )
  3. 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )
  4. 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
  5. 【Android 应用开发】Android - TabHost 选项卡功能用法详解
  6. 判断条件为空时需要注意
  7. 远程桌面连接mstsc 超扎心
  8. document事件及例子
  9. 对应用程序启动时所有方法的调用顺序分析
  10. 尝鲜党:Nexus5、6刷安卓M教程