Android仿微信界面--使用Fragment实现(慕课网笔记)
1 效果图
这里我们没有实现滑动切换view的功能
2 具体实现:
2.1 布局文件:top.xml, bottom.xml,tab01.xml,tab02.xml,tab03.xml,tab04.xml
具体请参考上述博客
2.2 新建4个Fragment,WeixinFragment,FrdFragment,AddressFragment,SettingFragment,分别对应tab01.xml,tab02.xml,tab03.xml,tab04.xml,其中这个Fragment是android.support.v4.app下面的(为了更好的兼容低版本的安卓设备),此时注意,以下凡是用到的Fragment都要是android.support.v4.app下的,这样不易出问题。
WeixinFragment
package com.example.imooc_weixinfragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class WeixinFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//引入我们的布局
return inflater.inflate(R.layout.tab01, container, false);
} }
FrdFragment
package com.example.imooc_weixinfragment; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class FrdFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//引入我们的布局
return inflater.inflate(R.layout.tab02, container, false);
} }
AddressFragment
package com.example.imooc_weixinfragment; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class AddressFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//引入我们的布局
return inflater.inflate(R.layout.tab03, container, false);
} }
SettingFragment
package com.example.imooc_weixinfragment; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class SettingFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//引入我们的布局
return inflater.inflate(R.layout.tab04, container, false);
} }
activity_main.xml,这里我们使用FrameLayout代替viewPager
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
> <include layout="@layout/top"/>
<FrameLayout
android:id="@+id/id_content"
android:layout_weight=""
android:layout_width="match_parent"
android:layout_height="0dp"> </FrameLayout>
<include layout="@layout/bottom"/> </LinearLayout>
2.3 MainActivity
package com.example.imooc_weixinfragment; import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout; //我们使用的是android v4包下的fragment,这里必须要继承自FragmentActivity,而不是Activity
public class MainActivity extends FragmentActivity implements OnClickListener{
//底部的4个导航控件
private LinearLayout mTabWeixin;
private LinearLayout mTabFrd;
private LinearLayout mTabAddress;
private LinearLayout mTabSetting;
//底部4个导航控件中的图片按钮
private ImageButton mImgWeixin;
private ImageButton mImgFrd;
private ImageButton mImgAddress;
private ImageButton mImgSetting;
//初始化4个Fragment
private Fragment tab01;
private Fragment tab02;
private Fragment tab03;
private Fragment tab04; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initView();//初始化所有的view
initEvents();
setSelect();//默认显示微信聊天界面
} private void initEvents() {
mTabWeixin.setOnClickListener(this);
mTabFrd.setOnClickListener(this);
mTabAddress.setOnClickListener(this);
mTabSetting.setOnClickListener(this); } private void initView() {
mTabWeixin = (LinearLayout)findViewById(R.id.id_tab_weixin);
mTabFrd = (LinearLayout)findViewById(R.id.id_tab_frd);
mTabAddress = (LinearLayout)findViewById(R.id.id_tab_address);
mTabSetting = (LinearLayout)findViewById(R.id.id_tab_setting);
mImgWeixin = (ImageButton)findViewById(R.id.id_tab_weixin_img);
mImgFrd = (ImageButton)findViewById(R.id.id_tab_frd_img);
mImgAddress = (ImageButton)findViewById(R.id.id_tab_address_img);
mImgSetting = (ImageButton)findViewById(R.id.id_tab_setting_img); } @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 boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} @Override
public void onClick(View v) {
resetImg();
switch (v.getId()) {
case R.id.id_tab_weixin://当点击微信按钮时,切换图片为亮色,切换fragment为微信聊天界面
setSelect();
break;
case R.id.id_tab_frd:
setSelect();
break;
case R.id.id_tab_address:
setSelect();
break;
case R.id.id_tab_setting:
setSelect();
break; default:
break;
} } /*
* 将图片设置为亮色的;切换显示内容的fragment
* */
private void setSelect(int i) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();//创建一个事务
hideFragment(transaction);//我们先把所有的Fragment隐藏了,然后下面再开始处理具体要显示的Fragment
switch (i) {
case :
if (tab01 == null) {
tab01 = new WeixinFragment();
/*
* 将Fragment添加到活动中,public abstract FragmentTransaction add (int containerViewId, Fragment fragment)
*containerViewId即为Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container.
* */
transaction.add(R.id.id_content, tab01);//将微信聊天界面的Fragment添加到Activity中
}else {
transaction.show(tab01);
}
mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
break;
case :
if (tab02 == null) {
tab02 = new FrdFragment();
transaction.add(R.id.id_content, tab02);
}else {
transaction.show(tab02);
}
mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case :
if (tab03 == null) {
tab03 = new AddressFragment();
transaction.add(R.id.id_content, tab03);
}else {
transaction.show(tab03);
}
mImgAddress.setImageResource(R.drawable.tab_address_pressed);
break;
case :
if (tab04 == null) {
tab04 = new SettingFragment();
transaction.add(R.id.id_content, tab04);
}else {
transaction.show(tab04);
}
mImgSetting.setImageResource(R.drawable.tab_settings_pressed);
break; default:
break;
}
transaction.commit();//提交事务
} /*
* 隐藏所有的Fragment
* */
private void hideFragment(FragmentTransaction transaction) {
if (tab01 != null) {
transaction.hide(tab01);
}
if (tab02 != null) {
transaction.hide(tab02);
}
if (tab03 != null) {
transaction.hide(tab03);
}
if (tab04 != null) {
transaction.hide(tab04);
} } private void resetImg() {
mImgWeixin.setImageResource(R.drawable.tab_weixin_normal);
mImgFrd.setImageResource(R.drawable.tab_find_frd_normal);
mImgAddress.setImageResource(R.drawable.tab_address_normal);
mImgSetting.setImageResource(R.drawable.tab_settings_normal);
}
}
源码在这里:http://download.csdn.net/detail/hnyzwtf/9356533
Android仿微信界面--使用Fragment实现(慕课网笔记)的更多相关文章
- Android仿微信界面
效果图 原理介绍 1.先绘制一个颜色(例如:粉红) 2.设置Mode=DST_IN 3.绘制我们这个可爱的小机器人 回答我,显示什么,是不是显示交集,交集是什么?交集是我们的小机器人的非透明区域,也就 ...
- Android ActionBar仿微信界面
ActionBar仿微信界面 1.学习了别人的两篇关于ActionBar博客,在结合别人的文章来仿造一下微信的界面: 思路如下:1).利用ActionBar生成界面的头部,在用ActionBar的Ac ...
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...
- Android 仿微信小视频录制
Android 仿微信小视频录制 WechatShortVideo和WechatShortVideo文章
- H5仿微信界面教程(一)
前言 先来张图,仿微信界面,界面如下,并不完全一模一样,只能说有些类似,希望大家见谅. 1 用到的知识点 jQuery WeUI 是WeUI的一个jQuery实现版本,除了实现了官方插件之外,它还提供 ...
- h5移动端聊天室|仿微信界面聊天室|h5多人聊天室
今年的FIFA世界杯甚是精彩,最近兴致高涨就利用HTML5开发了一个手机端仿微信界面聊天室,该h5聊天室采用750px全新伸缩flex布局,以及使用rem响应式配合fontsize.js,页面弹窗则是 ...
- react聊天室|react+redux仿微信聊天IM实例|react仿微信界面
一.项目概况 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+react-photoswipe+swiper等技术混合开 ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- Android控件-Fragment+ViewPager(高仿微信界面)
什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个 ...
随机推荐
- django接收和发送json数据
通过json.jumps处理字典数据, 发送给前端 def get_context_data(self, **kwargs): ctx = super(HelpUpdateView, self).ge ...
- MySQL命令记录1
mysql命令行 开启:net start mysql56关闭:net start mysql56(这两种情况必须有管理员权限) 登陆:mysql -h localhost -u root -p(lo ...
- SQL Server 文件自动增长那些事
方法 1. 把文件的增长设置为按照固定大小增长. 如filegrowth = 100MB; ------------------------------------------------------ ...
- webpack图片的路径与打包
转的http://www.cnblogs.com/ghost-xyx/p/5812902.html 今天写 react遇到打包图片,之前都是通过url在css里,没遇到问题,今天在 react里直接用 ...
- 好久没来了,重出江湖,共享个python34+pyqt+pyserial串口工具源码
真的是好久没来了,写博客对我来说还真是难坚持下来,热度一过就忘了,就算什么时候想起来也懒得去敲一个字,这次真不知道能坚持多久,随心吧,想写写,不想写也不勉强自己. 最近由于工作调试需要自己写了一个带图 ...
- 【C语言】单片机上的按键检测框架
又好久没来写blog,最近在做项目发现之前写的stm32操作都忘了,还好做了个记录,回来看了下很多忘了的就又知道怎么做了. 下面是我之前写的一个按键检测的框架,适合比较多的按键操作,从信号接收.滤波. ...
- PowerDesigner15在生成SQL时报错Generation aborted due to errors detected during the verification of the mod
转载: http://blog.csdn.net/successful555/article/details/7582154 PowerDesigner中如何设置字符编码为GBK或者GB2312 ht ...
- QT:程序忙碌时的进度条——开启时间循环,等结束的时候再退出
当程序在执行一项(或多项)耗时比较久的操作时,界面总要有一点东西告诉用户“程序还在运行中”,那么,一个“没有终点”的进度条就是你需要的了.PS:最好把耗时的操作扔到一个子线程中去,以免他阻塞了界面线程 ...
- C#正则表达式匹配任意字符
原文:C#正则表达式匹配任意字符 不得不说正则很强大,尤其在字符串搜索上 匹配任意字符,包括汉字,换行符: [\s\S]*. 版权声明:本文为博主原创文章,未经博主允许不得转载.
- c++11介绍
C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称[1] . C++11 ...