Android仿微信主界面的实现方法

本文实例为大家分享了Android模仿微信主界面展示的具体代码,供大家参考,具体内容如下

先看一下效果图

实现的原理:

ViewPager+FragmentPagerAdapter

主界面可分为三部分:

  • top标题栏就是一个TextView
  • 中间的ViewPager作为显示的容器,填充Fragment
  • bottom是一个RadioGroup

这里为了布局的优化,将top和bottom抽取出来 ,然后用include将其导入主布局,如下

<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"
  tools:context=".MainActivity" >

  <include layout="@layout/top" />

  <android.support.v4.view.ViewPager
    android:id="@+id/vp_content"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
  </android.support.v4.view.ViewPager>

  <include layout="@layout/bottom" />
</LinearLayout>

bottom_tab的布局,为了方便管理将它们的共性抽取出来一个style
tab有两种状态,选中和非选中,因此将其背景做成一个选择器selector

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rg_tab_container"
  android:layout_width="match_parent"
  android:layout_height="@dimen/bar_height"
  android:background="@drawable/bottom_bar"
  android:gravity="center"
  android:orientation="horizontal" >

  <RadioButton
    android:id="@+id/rb_tab_weixin"
    style="@style/TabStyle"
    android:checked="true"
    android:drawableTop="@drawable/tab_weixin_selector"
    android:text="@string/tab_weixin" />

  <RadioButton
    android:id="@+id/rb_tab_friend"
    style="@style/TabStyle"
    android:drawableTop="@drawable/tab_friend_selector"
    android:text="@string/tab_friend" />

  <RadioButton
    android:id="@+id/rb_tab_contact"
    style="@style/TabStyle"
    android:drawableTop="@drawable/tab_contact_selector"
    android:text="@string/tab_contact" />

  <RadioButton
    android:id="@+id/rb_tab_setting"
    style="@style/TabStyle"
    android:drawableTop="@drawable/tab_setting_selector"
    android:text="@string/tab_setting" />

</RadioGroup>

最后看一下作为Controller的Activity

  1. 先将需要的控件引入
  2. ViewPager内容的填充,主要是FragmentPagerAdapter适配器
  3. 将Fragment的初始化,将主界面显示的内容分别用Fragment管理,方便代码的管理。
  4. bottom_tab和ViewPager的关联,通过监听ViewPager页面的改变来改变tab的选中状态,然后再通过RadioGroup的事件来改变ViewPager的页面。
/**
 * 主界面 模仿微信界面
 *
 * @author admin
 *
 */
public class MainActivity extends FragmentActivity {

  /** tab */
  private RadioGroup mRadioGroup;

  private RadioButton weixinRadioButton;
  private RadioButton friendRadioButton;
  private RadioButton contactRadioButton;
  private RadioButton settingRadioButton;

  /** 显示内容容器 */
  private ViewPager mViewPager;

  private List<Fragment> fragments;

  private Fragment mWeiXinFragment;
  private Fragment mFriendFragment;
  private Fragment mContactFragment;
  private Fragment mSettingFragment;

  private FragmentPagerAdapter mFragmentPagerAdapter;

  private final static int TAB_WEIXIN = 0;
  private final static int TAB_FRIEND = 1;
  private final static int TAB_CONTACT = 2;
  private final static int TAB_SETTING = 3;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);

    initView();

    initEvent();
  }

  private void initEvent() {

    mRadioGroup.setOnCheckedChangeListener(myCheckedChangeListener);
    mViewPager.setOnPageChangeListener(myOnPageChangeListener);
  }

  private void initView() {
    mRadioGroup = (RadioGroup) findViewById(R.id.rg_tab_container);

    weixinRadioButton = (RadioButton) findViewById(R.id.rb_tab_weixin);
    friendRadioButton = (RadioButton) findViewById(R.id.rb_tab_friend);
    contactRadioButton = (RadioButton) findViewById(R.id.rb_tab_contact);
    settingRadioButton = (RadioButton) findViewById(R.id.rb_tab_setting);

    mViewPager = (ViewPager) findViewById(R.id.vp_content);

    fragments = new ArrayList<Fragment>();

    mWeiXinFragment = new WeiXinFragment();
    mFriendFragment = new FriendFragment();
    mContactFragment = new ContactFragment();
    mSettingFragment = new SettingFragment();

    fragments.add(mWeiXinFragment);
    fragments.add(mFriendFragment);
    fragments.add(mContactFragment);
    fragments.add(mSettingFragment);
//这里需要继承FragmentActivity
    mFragmentPagerAdapter = new FragmentAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mFragmentPagerAdapter);

  }

  /**
   * 当页面切换时,tab也跟着切换
   */
  private OnPageChangeListener myOnPageChangeListener = new OnPageChangeListener() {

    @Override
    public void onPageSelected(int arg0) {
      switch (arg0) {
      case TAB_WEIXIN:

        if (!weixinRadioButton.isChecked()) {
          weixinRadioButton.setChecked(true);
        }
        break;
      case TAB_FRIEND:
        friendRadioButton.setChecked(true);

        break;
      case TAB_CONTACT:
        contactRadioButton.setChecked(true);

        break;
      case TAB_SETTING:
        settingRadioButton.setChecked(true);

        break;

      }
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {

    }
  };

  /**
   * 点击tab,切换到相应的页面
   */
  private OnCheckedChangeListener myCheckedChangeListener = new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {

      switch (checkedId) {
      case R.id.rb_tab_weixin:

        mViewPager.setCurrentItem(TAB_WEIXIN);
        break;
      case R.id.rb_tab_friend:

        mViewPager.setCurrentItem(TAB_FRIEND);
        break;
      case R.id.rb_tab_contact:

        mViewPager.setCurrentItem(TAB_CONTACT);
        break;
      case R.id.rb_tab_setting:
        mViewPager.setCurrentItem(TAB_SETTING);

        break;

      }
    }
  };

  private class FragmentAdapter extends FragmentPagerAdapter {

    public FragmentAdapter(FragmentManager fm) {
      super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
      return fragments.get(arg0);
    }

    @Override
    public int getCount() {
      return fragments.size();
    }

  }

}

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

您可能感兴趣的文章:

  • Android 使用Fragment模仿微信界面的实例代码
  • Android仿支付宝微信支付密码界面弹窗封装dialog
  • Android 仿微信图像拍摄和选择界面功能(代码分享)
  • Android仿微信语音聊天界面设计
  • android仿微信聊天界面 语音录制功能
  • Android仿QQ、微信聊天界面长按提示框效果
  • Android高仿微信5.2.1主界面及消息提醒
  • Android App仿微信界面切换时Tab图标变色效果的制作方法
  • Android高仿微信聊天界面代码分享
  • Android仿微信主界面设计
时间: 2018-04-12

Android仿微信主界面设计

先来一张效果图 一.ActionBar的设计 首先是main.xml,先定义这些菜单,界面稍后在调整 <menu xmlns:android="http://schemas.android.com/apk/res/android" tools:context=".MainActivity"> <item android:id="@+id/action_search" android:actionViewClass="a

Android仿微信语音聊天界面设计

有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录.代码和老师讲的基本一样,网上也有很多相同的博客.我只是在AndroidStudio环境下写的. --主界面代码-- public class MainActivity extends Activity { private ListView mListView; private ArrayAdapter<Recorder> mAdapter; private List<Recorder>

Android高仿微信聊天界面代码分享

微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们来看一下整个小项目的主体结构: 下面是Activity的代码: package com.way.demo; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import jav

Android App仿微信界面切换时Tab图标变色效果的制作方法

概述 1.概述 学习Android少不了模仿各种app的界面,自从微信6.0问世以后,就觉得微信切换时那个变色的Tab图标屌屌的,今天我就带大家自定义控件,带你变色变得飞起~~ 好了,下面先看下效果图: 清晰度不太好,大家凑合看~~有木有觉得这个颜色弱爆了了的,,,下面我动动手指给你换个颜色: 有没有这个颜色比较妖一点~~~好了~下面开始介绍原理. 2.原理介绍 通过上面的效果图,大家可能也猜到了,我们的图标并非是两张图片,而是一张图,并且目标颜色是可定制的,谁让现在动不动就谈个性化呢. 那么我

android仿微信聊天界面 语音录制功能

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" andro

Android 仿微信图像拍摄和选择界面功能(代码分享)

插件运行后的画面如下: 下面这张图对图像进行筛选,根据照片产生的源头分(QQ和微信和相机) 点击某文件夹后,可以查看该文件夹下包含的所有的图片 图片选择界面 选中后就跳到已经选择界面的窗口,并且可以对该吃图片上传进行简要的描述 首先我想说明的是这个插件默认是不进行图片筛选的,打开app后会有几十个文件夹,但是个人认为开发中常用的图片基本都来自于QQ中拍摄的照片,微信中拍摄的照片,以及相机直接拍摄的照片,因此我对这个插件进行过滤以及文件夹名称的更改,具体做法,主要是对AlbumHelper类bui

Android仿QQ、微信聊天界面长按提示框效果

先来看看效果图 如何使用 示例代码 PromptViewHelper pvHelper = new PromptViewHelper(mActivity); pvHelper.setPromptViewManager(new ChatPromptViewManager(mActivity)); pvHelper.addPrompt(holder.itemView.findViewById(R.id.textview_content)); 使用起来还是很简单的 首先new一个PromptViewH

Android高仿微信5.2.1主界面及消息提醒

好久没更新博客了,最近在做公司的项目,这也算是我接触的第一个正式项目.通过项目的检验,发现自己积累了一年的知识还是远远不够,想要提高,好的方法是 :项目+书+视频+博客.最重要一点:勤动手.最近发现了慕课网的视频,居然都是高清无码免费的!而且满满的干货!我用业余时间跟着视频中大神的讲解学习了不少知识,下面就将这些小demo与大家分享,当然,我做了一些优化,代码与视频中有些出入,但功能可以完全实现. 这是一个模仿5.2.1版本的显示界面,如下图所示: 功能及实现思路简介 主要功能很简单: 1.上面

Android仿支付宝微信支付密码界面弹窗封装dialog

一,功能效果 二,实现过程 1,先写xml文件:dialog_keyboard.xml 注意事项 (1),密码部分用的是一个线性布局中6个TextView,并设置android:inputType="numberPassword",外框是用的一个有stroke属性的shape, (2),1-9数字是用的recycleview ,每个item的底部和右边有1dp的黑线,填充后形成分割线. (3),recycleview 要设置属性  android:overScrollMode=&quo

Android 使用Fragment模仿微信界面的实例代码

什么是Fragment 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其目的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments . fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activit

Android用ActionBar高仿微信主界面的实例代码

经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Android ActionBar完全解析使用官方推荐的最佳导航栏(上)和 Android ActionBar完全解析使用官方推荐的最佳导航

使用ViewPage+Fragment仿微信界面

本文实例为大家分享了ViewPage+Fragment仿微信界面的具体代码,供大家参考,具体内容如下 实现效果: 左右滑动可切换界面,点击也可以实现 界面与碎片: 主界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="h

Android程序开发之Fragment实现底部导航栏实例代码

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】

本文实例讲述了Android开发实现模仿微信小窗口功能.分享给大家供大家参考,具体如下: 运用方法: 将显示窗口的风格 设置为对话框风格即可 具体效果: 具体实现: 首先我们先定义布局文件: <?xml version="1.0" encoding="utf-8" ?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" andro

Android 中按home键和跳转到主界面的实例代码

//home Intent intent= new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //如果是服务里调用,必须加入new task标识 intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); //主界面 Intent intent = new Intent(Intent.ACTION_MAIN,null)

Android自定义手机界面状态栏实例代码

前言 我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现这个效果有两个方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDecor Theme.Holo.NoActi

Android基于Xposed修改微信运动步数实例

前言:Zygote 是 Android 的核心,每打开一个 app,Zygote 就会 fork 一个虚拟机实例来运行 app,基于Xposed我们可以使用android hook技术对APK中的方法进行调试.关键API拦截.外挂等. 这篇文章建立在Xposed模块开发的基础之上,没有开发过Xposed模块的请先看这篇入门教程<Xposed模块开发入门教程> 一.微信运动修改步数原理 当点击微信运动排行榜的时候微信APP会获取手机上计数传感器的数值,然后传感器会返回我们行走的步数.此时我们使用

Android开发之模仿微信打开网页的进度条效果(高仿)

一,为什么说是真正的高仿? 阐述这个问题前,先说下之前网上的,各位可以复制这段字,去百度一下  "仿微信打开网页的进度条效果" ,你会看到有很多类似的文章,不过他们有个共同点,就是实现方法都是一样的,而且,都忽略了微信加载网页时,进度条的缓慢动画效果,它不是生硬地一滑而过,而是用户体验很好,有个速度的变化,由慢到快的效果,语言难于描述,相信各位都有下载微信,可以随便打开个公众号的文章看看效果. 好了,上面说到,之前网上的方法都是都忽略了微信加载网页时,进度条的缓慢动画效果,实现代码也是

react native 仿微信聊天室实例代码

一.前言 9月,又到开学的季节.为每个一直默默努力的自己点赞!最近都沉浸在react native原生app开发中,之前也有使用vue/react/angular等技术开发过聊天室项目,另外还使用RN技术做了个自定义模态弹窗rnPop组件. 一.项目简述 基于react+react-native+react-navigation+react-redux+react-native-swiper+rnPop等技术开发的仿微信原生App界面聊天室--RN_ChatRoom,实现了原生app启动页.As