使用FragmentTabHost和ViewPager实现仿微信主界面侧滑
最近看到很多界面主页都差不多,决定研究研究写出来,以后直接拿来用,不做代码的轮子,多总结,多学习
还是废话少说,先上图
介绍一下我的代码:
首先是布局文件:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <android.support.v4.view.ViewPager
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
- <android.support.v4.app.FragmentTabHost
- android:id="@android:id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/black" >
- <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放在上面的话,可以把viewPager和FragmentTabHost位置换一下,以上就是主界面了,比较简单没什么好说的,给个小技巧吧,shift+ctrl+T可以查找你想要的包,例如输入viewPager,直接粘android.support.v4.view.ViewPager就可以了,比较方便
下面就是MainActivity了:
- package com.sdufe.thea.framework;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.zip.Inflater;
- import android.os.Bundle;
- import android.R.integer;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentTabHost;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.TabHost.OnTabChangeListener;
- import android.widget.TabHost.TabSpec;
- import android.widget.TabWidget;
- import android.widget.TextView;
- public class MainActivity extends FragmentActivity implements
- OnPageChangeListener, OnTabChangeListener {
- private FragmentTabHost mTabHost;
- private LayoutInflater layoutInflater;
- private Class fragmentArray[] = { Fragment1.class, Fragment.class,
- Fragment3.class, Fragment4.class };
- private int imageViewArray[] = { R.drawable.mywork, R.drawable.mypatient,
- R.drawable.infusion, R.drawable.personal };
- private String textViewArray[] = { "工作", "病人", "互动", "个人中心" };
- private List<Fragment> list = new ArrayList<Fragment>();
- private ViewPager vp;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_tab_layout);
- initView();
- initPage();
- }
- /**
- * 控件初始化
- */
- private void initView() {
- vp = (ViewPager) findViewById(R.id.pager);
- vp.setOnPageChangeListener(this);
- layoutInflater = LayoutInflater.from(this);
- mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
- mTabHost.setup(this, getSupportFragmentManager(), R.id.pager);
- mTabHost.setOnTabChangedListener(this);
- int count = textViewArray.length;
- for (int i = 0; i < count; i++) {
- TabSpec tabSpec = mTabHost.newTabSpec(textViewArray[i])
- .setIndicator(getTabItemView(i));
- mTabHost.addTab(tabSpec, fragmentArray[i], null);
- mTabHost.setTag(i);
- }
- }
- /**
- * 初始化Fragment
- */
- private void initPage() {
- Fragment1 fragment1 = new Fragment1();
- Fragment2 fragment2 = new Fragment2();
- Fragment3 fragment3 = new Fragment3();
- Fragment4 fragment4 = new Fragment4();
- list.add(fragment1);
- list.add(fragment2);
- list.add(fragment3);
- list.add(fragment4);
- vp.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), list));
- }
- private View getTabItemView(int i) {
- View view = layoutInflater.inflate(R.layout.tab_content, null);
- ImageView mImageView = (ImageView) view
- .findViewById(R.id.tab_imageview);
- TextView mTextView = (TextView) view.findViewById(R.id.tab_textview);
- mImageView.setBackgroundResource(imageViewArray[i]);
- mTextView.setText(textViewArray[i]);
- return view;
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- }
- @Override
- public void onPageSelected(int arg0) {
- TabWidget widget = mTabHost.getTabWidget();
- int oldFocusability = widget.getDescendantFocusability();
- widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
- mTabHost.setCurrentTab(arg0);
- widget.setDescendantFocusability(oldFocusability);
- mTabHost.getTabWidget().getChildAt(arg0)
- .setBackgroundResource(R.drawable.selector_tab_background);
- }
- @Override
- public void onTabChanged(String tabId) {
- int position = mTabHost.getCurrentTab();
- vp.setCurrentItem(position);
- }
- }
代码相对来说比较简单,下面的就不贴了
源码:https://github.com/zimoguo/FragmentTabHost-ViewPager
使用FragmentTabHost和ViewPager实现仿微信主界面侧滑相关推荐
- Android ActionBar应用实战,高仿微信主界面的设计
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对 ...
- 慕课网高仿微信主界面完整代码
微信主界面完整代码 Fragment+ViewPager实现 目录 前言 一.项目结构 二.使用步骤 前言 使用了ViewPager和Fragment的用法.支持滑屏显示界面和点击下标切换界面 . 一 ...
- Android jquery mobile 仿微信主界面
效果图: 地址:http://pan.baidu.com/s/1eSupF6E 总结:只要熟悉Jquery,很快就能上手,界面效果和原生的还是有些区别,做简单的页面还是可以的. page_ ...
- android 仿微信demo————微信主界面实现
android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...
- android 微信创建群ui,Android控件:高仿微信主UI
高仿微信主UI 之前在Android组件:Fragment切换后保存状态 一文中讲到了Fragment切换后,是如何保存原来的状态的,最重要的就是用add方法取代现在各种教程常见的replace方法. ...
- android仿微信聊天功能,Android高仿微信聊天界面代码分享
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...
- php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...
Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...
- android 微信高仿,Android高仿微信聊天界面代码分享
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...
- Vue3+ElementPlus网页端聊天|vue3.0仿微信/QQ界面实例
vue3-webchat 基于vue3.0.5开发的仿微信|QQ界面桌面端聊天实例. 运用vue3.x全家桶技术+element-plus+v3layer+v3scroll搭建的仿微信/QQ界面网页聊 ...
最新文章
- 【翻译】Ext JS最新技巧——2014-8-13
- 跟百万人一起在快手学自动驾驶,是种怎样的体验?
- 美团点评SQL优化工具SQLAdvisor开源
- python queue模块_Python的queue模块详解
- python中列表数据汇总和平均值_python的列表List求均值和中位数实例
- 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
- 虚拟机安装mac os x实战
- python-列表演练-根据学生id获取学生数据-获取学生数据中得分较高的前N条数据
- iOS越狱开发theOS搭建
- linux查看接口的命令,linux shell命令查看接口索引--ip link show
- python字典最大长度_支持key过期失效和限制字典大小的开源项目 [python expire max length]...
- Android Studio右下角显示当前branch名称不一致
- Alex Fung魔方解法学习记
- linux dhcpv6有状态配置,翻译:IPv6地址自动配置:有状态和无状态的区别
- bbys_tu_2016
- 【正点原子MP157连载】第四十三章 外置RTC芯片PCF8563实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 虚拟化+docker概念基本介绍
- 【微信小程序】协同工作与发布
- C语言控制桌面背景图
- 2020届校招算法岗面经汇总
热门文章
- 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )
- 【FluidSynth】SoundFont 音源文件资料收集 ( SoundFont 规范 | SoundFont 音源下载 | SoundFont 编辑器 | 博客资源 )
- 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )
- 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
- 【Android 应用开发】Android - TabHost 选项卡功能用法详解
- 判断条件为空时需要注意
- 远程桌面连接mstsc 超扎心
- document事件及例子
- 对应用程序启动时所有方法的调用顺序分析
- 尝鲜党:Nexus5、6刷安卓M教程