文章目录

  • 一、功能需求
  • 二、页面布局设置
    • 1. 顶部top.xml布局
    • 2. 底部bottom.xml布局
    • 3. 中间页面设置
    • 4. activity_main.xml
    • 5. 资源控制drawable文件
  • 三、页面跳转控制(java文件)
    • 1. MainActivity
    • 2. 其他Java文件
  • 四、运行界面展示
  • 五、源码

一、功能需求

完成一个类似微信页面的布局,要求:

  1. 页面最上方是标题居中
  2. 页面中间界面显示内容,内容随下方栏的选择而切换
  3. 页面最下方有四个按钮
  4. 点击按钮后,按钮图标会变换颜色,且显示框变换内容

二、页面布局设置

1. 顶部top.xml布局

创建layout文件top.xml中,添加文本框,添加文字,设置为居中,修改文字颜色和LinearLayout背景颜色。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:gravity="center"android:layout_height="50dp"android:background="#0E0D0D"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center_horizontal"android:text="我的微信"android:textColor="@color/white"android:textSize="25sp" />
</LinearLayout>

效果如下:

2. 底部bottom.xml布局

新建layout布局文件button.xml。
先添加一个LinearLayout(vertical),修改LinearLayout大小和颜色:修改gravity所对应的配置信息为center,再修改大小,添加id。
在刚刚添加的LinearLayout(vertical)下添加ImageButton,选择要放入的图片

在这里插入代码片<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="60dp"android:background="@color/colorViewNormal"android:gravity="center"><LinearLayoutandroid:id="@+id/chat"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"app:srcCompat="@drawable/chat2" /></LinearLayout><LinearLayoutandroid:id="@+id/contacts"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView2"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"app:srcCompat="@drawable/contracts2" /></LinearLayout><LinearLayoutandroid:id="@+id/circle_friend"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"app:srcCompat="@drawable/circleoffriend2" /></LinearLayout><LinearLayoutandroid:id="@+id/settings"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"app:srcCompat="@drawable/setting1" /></LinearLayout>
</LinearLayout>

复制三个修改好的LinearLayout,修改ImageButton的资源路径,分别修改LinearLayout、ImageView的id。
效果如下:

3. 中间页面设置

新建四个layout.xml文件,分别添加一个ImageView,修改文字内容,并将ImageView设置居中

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".chat"><ImageViewandroid:id="@+id/imageView6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/chat"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

ps:这里可能会出现“Missing Constraints in ConstraintLayout”的报错
解决方案是:拖拽界面中按钮四周的圆点,到你想要设置的相对距离

4. activity_main.xml

我们想要的效果是页面最上方是标题,中间显示文本,最下方有四个按钮,故在activity_main.xml中先添加一个LinearLayout
在LinearLayout中按顺序添加三个部分:
通过include标签添加top.xml和button.xml
由于四个显示文本的页面都是在中间,故选择通过放一个FrameLayout在top和button的中间

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.mydemo.MainActivity"><include layout="@layout/top"></include><FrameLayoutandroid:id="@+id/frame_content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"><ImageViewandroid:id="@+id/imageView9"android:layout_width="wrap_content"android:layout_height="wrap_content"app:srcCompat="@drawable/setting" /></FrameLayout><include layout="@layout/bottom"></include></LinearLayout>

5. 资源控制drawable文件

在使用之前先将图片文件导入到/res/drawable中,可以直接将windows本地文件拖拽至目标文件夹中

三、页面跳转控制(java文件)

1. MainActivity

先为fragment类创建实例对象
定义一个FragmentManager来控制Fragment

    //FragmentManagerprivate FragmentManager fragmentManager;

再写一个初始化Fragment的函数,将四个fragment放到FrameLayout中

 //初始化中间的部分的图层片段private void initFragment(){fragmentManager=getSupportFragmentManager();FragmentTransaction transaction=fragmentManager.beginTransaction();transaction.add(R.id.frame_content, Fragment_chat);transaction.add(R.id.frame_content, Fragment_contacts);transaction.add(R.id.frame_content, Fragment_circleoffriend);transaction.add(R.id.frame_content, Fragment_setting);//提交事务transaction.commit();}

我们需要实现的是,点击按钮,按钮会变色,并且跳转到相应的页面。所以我们需要对ImageButton所属的LinearLayout来进行监听,但是ImageButton和LinearLayout都属于布局文件中的一部分,我们不能直接调用,所以需要创建一个函数initView()来实现对ImageButton和LinearLayout控件实例化,方便我们后续调用

为实现点击按钮之后可以跳转到相应的页面,我们可以先隐藏四个界面,在点击button后再显示出选择的页面。可以选择自定义一个**HideFragment()**函数,调用hide()函数隐藏四个界面。

为实现点击按钮后变色,我们可以定义一个Fragment_select()函数来实现:传入一个参数,通过调用transaction的show()函数,展示对应的页面。

为实现点击按钮跳转页面,我们需要对进行监听。在最开头的MainActivity后添加implements View.OnClickListener,函数具体作用代码中有注释:

package com.example.mydemo;import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;public class MainActivity extends AppCompatActivity implements View.OnClickListener{//Fragmentprivate Fragment Fragment_chat =new chat();private Fragment Fragment_contacts =new contacts();private Fragment Fragment_circleoffriend =new circleoffriend();private Fragment Fragment_setting =new setting();//底端菜单栏LinearLayoutprivate LinearLayout linear_chat;private LinearLayout linear_contacts;private LinearLayout linear_ciecleoffriend;private LinearLayout linear_setting;//底端菜单栏中的Imageviewprivate ImageView imageView_chat;private ImageView imageView_contacts;private ImageView imageView_circleoffriend;private ImageView imageView_setting;//FragmentManagerprivate FragmentManager fragmentManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE );setContentView(R.layout.activity_main);initView();initFragment();initEvent();Fragment_select(0);//将第一个图标设为选中状态imageView_chat.setImageResource(R.drawable.chat);imageView_chat.setImageResource(R.drawable.chat1);}//监听函数,监听到底是哪一个图标被击中从而显示哪一个界面的内容@Overridepublic void onClick(View view) {//每次点击之后,将所有的ImageView和TextView设置为未选中restartButton();switch(view.getId()){case R.id.chat://选择所点击的菜单对应的图层片段Fragment_select(0);//将该菜单的点击状态置为点击态imageView_chat.setImageResource(R.drawable.chat);imageView_chat.setImageResource(R.drawable.chat1);break;case R.id.contacts:Fragment_select(1);imageView_contacts.setImageResource(R.drawable.contracts);imageView_contacts.setImageResource(R.drawable.contracts1);break;case R.id.circle_friend:Fragment_select(2);imageView_circleoffriend.setImageResource(R.drawable.circleoffirend);imageView_circleoffriend.setImageResource(R.drawable.circleoffriend1);break;case R.id.settings:Fragment_select(3);imageView_setting.setImageResource(R.drawable.setting);imageView_setting.setImageResource(R.drawable.setting1);break;default:break;}}//重置菜单的点击状态,设为未点击private void restartButton() {//设置为未点击状态imageView_chat.setImageResource(R.drawable.chat);imageView_chat.setImageResource(R.drawable.chat1);imageView_contacts.setImageResource(R.drawable.contracts);imageView_contacts.setImageResource(R.drawable.contracts1);imageView_circleoffriend.setImageResource(R.drawable.circleoffirend);imageView_circleoffriend.setImageResource(R.drawable.circleoffriend1);imageView_setting.setImageResource(R.drawable.setting);imageView_setting.setImageResource(R.drawable.setting1);}//初始化中间的部分的图层片段private void initFragment(){fragmentManager=getSupportFragmentManager();FragmentTransaction transaction=fragmentManager.beginTransaction();transaction.add(R.id.frame_content, Fragment_chat);transaction.add(R.id.frame_content, Fragment_contacts);transaction.add(R.id.frame_content, Fragment_circleoffriend);transaction.add(R.id.frame_content, Fragment_setting);//提交事务transaction.commit();}//初始化各底端的LinearLayout、ImageView和TextView组件private  void initView(){//改变图标颜色linear_chat =findViewById(R.id.chat);linear_contacts =findViewById(R.id.contacts);linear_ciecleoffriend =findViewById(R.id.circle_friend);linear_setting =findViewById(R.id.settings);imageView_chat =findViewById(R.id.imageView1);imageView_contacts =findViewById(R.id.imageView2);imageView_circleoffriend =findViewById(R.id.imageView3);imageView_setting =findViewById(R.id.imageView4);}//初始化点击监听事件private void initEvent(){linear_chat.setOnClickListener(this);linear_contacts.setOnClickListener(this);linear_ciecleoffriend.setOnClickListener(this);linear_setting.setOnClickListener(this);}//把没有使用的界面的内容隐藏private void hideView(FragmentTransaction transaction){transaction.hide(Fragment_chat);transaction.hide(Fragment_contacts);transaction.hide(Fragment_circleoffriend);transaction.hide(Fragment_setting);}//显示选中界面的内容,选中界面图标为绿色private void Fragment_select(int i){FragmentTransaction transaction=fragmentManager.beginTransaction();//调用隐藏所有图层函数hideView(transaction);switch (i){case 0:transaction.show(Fragment_chat);break;case 1:transaction.show(Fragment_contacts);break;case 2:transaction.show(Fragment_circleoffriend);break;case 3:transaction.show(Fragment_setting);break;default:break;}//提交转换事务transaction.commit();}
}

2. 其他Java文件

这里因为有四个页面,分别是聊天、联系人、朋友圈、我,对应着chat.java、contacts.java、circleoffriend.java、setting.java文件。

四、运行界面展示

结果展示我只选了两个界面进行展示
中间的内容,我并没选择使用文本框,而是自己实际微信界面的截图,这样显得更加真实。

ps:这里运行后出现了“Emulator: handleCpuAcceleration: feature check for hvf”问题
解决办法:修改配置文件

五、源码

自己之前已有GitHub的账号,所以就直接将代码上传了。
ssh-keygen -t rsa -C "我的邮箱"生成密钥
出现了“invalid authentication data. 404 Not Found-Not Found”问题,这里应选择利用token连接
详细代码已上传至代码仓库

Android Studio之仿微信APP界面设计相关推荐

  1. [Android] Android 手机下 仿 微信 客户端 界面 -- 微聊

    Android 手机下 仿 微信 客户端 界面 -- 微聊 (包括聊天列表 + 聊天对话页 + 朋友圈列表页 + 我的/发现 列表页) 项目演示: 功能说明: 1)底部标签切换 (TabHost + ...

  2. Android studio实现仿微信界面

    一.静态界面实现(.xml) 功能需求 1.上方有标题(居中) 2.中间显示内容,内容随着下方控件而切换. 3.下方四个控件可切换. 实现页面展示: 共三大部分,顶部和底部一直不变,中间部分随着点击切 ...

  3. uniapp+nvue实现仿微信App界面+功能 —— uni-app实现聊天+语音+视频+图片消息

    基于uniapp + nvue实现的uniapp仿微信界面功能聊天应用 txim 实例项目,实现了以下功能. 1: 聊天会话管理 2: 好友列表 3: 文字.语音.视频.表情.位置等聊天消息收发 4: ...

  4. android ui头像圆角化,APP界面设计当中,为什么喜欢把头像设计成圆形

    看到这样的标题,你是不是也很惊奇呢?仔细的去回想一下,好像很多APP界面设计当中的头像都是圆形的.很少见到头像是方形的.菱形或者四边形的. 这是为什么呢? 难道是因为好看吗? 今天25学堂的小编跟大家 ...

  5. dart 获取手机信息_flutter+dart仿微信App界面聊天实例

    Flutter 是 谷歌 开源的 UI 框架,旨在帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.相比较目前的混合开发方案,Flutter 提供了大量的文档,能非常 ...

  6. vue整合uniapp_uni-app仿微信App界面|vue+uniapp聊天室|仿微信朋友圈

    项目简介 基于uni-app+vue+vuex+uniPop+swiper等技术开发的仿微信聊天室uniapp-chatroom项目,类似vue及小程序api语法使开发更加方便,实现了发送图文消息.表 ...

  7. Android jquery mobile 仿微信主界面

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

  8. Android Studio校园二手交易市场app

    [安卓大作业]Android Studio校园二手交易市场app 界面展示 主要功能 1.登陆注册用户,若忘记密码可通过邮箱找回密码: 2.商品分类展示,可在首页购买商品: 3.商品详情页可留言.收藏 ...

  9. Android studio心得——用fragment仿微信APP

    前言 今天我想与大家分享一些关于如何利用fragment实现仿微信APP的经验.作为社交领域最受欢迎.功能齐全且可扩展性强的应用之一,微信APP在浏览器首页和个人中心之上还有一个重要部分:底部导航栏. ...

  10. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

最新文章

  1. python从入门到精通视频-python从入门到精通视频(大全60集)
  2. 怎么分辨学校计算机sql版本,怎么筛选出每个年级每个学校有多少个班级
  3. 人类长非编码RNA表达数据库,整合9种重要生物学场景(发育、癌症、病毒侵染等)...
  4. ubuntu之Matlab安装
  5. Spring实战——无需一行xml配置实现自动化注入
  6. 文件带 BOM 的看法
  7. 《遗传算法原理及应用》笔记—绪论
  8. 红外遥控器-VS1838B/HS0038红外接收方案(包含原理图+PCB+BOM表+程序)
  9. BCM94360Z4刷蓝牙固件魔改, Mac真正免驱无线网卡,实现原装网卡一样完美黑苹果,啊哈哈
  10. python arp断网攻击_arp断网攻击,手把手教你arp断网攻击怎么解决
  11. 小程序如何cdn加速服务器,小程序能用cdn加速吗
  12. 示波器探头需要补偿校准的根本原因
  13. 新手村 - 第四站,认识成交量
  14. java初步编程教程,2022最新
  15. 使用树莓派定时给微信群发消息
  16. 【软考——系统架构师】信息系统基础
  17. 某奇迹私服 S18 客户端木马逆向分析
  18. Android Studio之菜单栏制作
  19. 官宣:今晚下班先别走
  20. 推荐系统常用评价指标

热门文章

  1. 怎么看两张图片的相似度,测试两张照片相似度
  2. [HLSL]HLSL 入门参考 (dx11龙书附录B译文)
  3. 卡西欧计算机设置参数,【卡西欧 fx-991CN X 中文函数计算器使用总结】参数|功能|显示|计算_摘要频道_什么值得买...
  4. 使用MindSpore进行一阶导数计算
  5. 群晖Docker部署Alist V2
  6. 360路由器虚拟服务器怎么设置,路由器端口映射设置步骤
  7. 摘抄整理:基于数据驱动的故障诊断方法综述
  8. vim方向键、退格键失效,insert模式异常修复方法
  9. 网络是怎样连接的?从浏览器输入URL开始
  10. 揭秘工业互联网的内涵、热点与难点!