移动开发实验一:微信ui设计

一、设计目标


1.1 设计要求


完成类微信的门户页面框架设计,APP最少必须包含4个tab页面。框架设计需要使用 fragment,activity,不得使用UNIAPP技术进行开发(H5或者小程序);

1.2 设计功能介绍


(1)顶部显“微信“”

(2)底部有四个按钮,分别为聊天、好友、通讯录、设置。

(3)点击按钮,按钮图标变化且点击不同按钮,中间显示界面显示对应的内容。

二、界面设计


2.1 UI布局设计


2.1.1 准备图片

2.1.2 顶端top.xml

代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView

android:id="@+id/textView"

android:textSize="40sp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="#FFFFFF"

android:layout_weight="1"

android:gravity="center"

android:textColor="#4ab4a5"

android:text="微信" />

</LinearLayout>

2.1.3 底端button.xml

代码:

<?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="70dp"

android:background="#FFFFFF"

android:orientation="horizontal"

android:baselineAligned="false">

<LinearLayout

android:id="@+id/linear_char"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:orientation="vertical"

android:onClick="onClick">

<TextView

android:id="@+id/textView6"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="聊天"

android:textColor="#4ab4a5"

android:textSize="20dp" />

<ImageButton

android:id="@+id/聊天"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#FFFFFF"

android:contentDescription="微信"

android:clickable="false"

app:srcCompat="@drawable/chat"

android:scaleType="centerInside"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linear_friend"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:onClick="onClick"

android:orientation="vertical">

<TextView

android:id="@+id/textView3"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="好友"

android:textColor="#4ab4a5"

android:textSize="20dp" />

<ImageButton

android:id="@+id/朋友"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#FFFFFF"

android:contentDescription="微信"

android:clickable="false"

app:srcCompat="@drawable/friend"

android:scaleType="centerInside"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linear_contact"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical"

android:onClick="onClick">

<TextView

android:id="@+id/textView4"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="通讯录"

android:textColor="#4ab4a5"

android:textSize="20dp" />

<ImageButton

android:id="@+id/通讯录"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#FFFFFF"

android:clickable="false"

android:contentDescription="微信"

app:srcCompat="@drawable/contect"

android:scaleType="centerInside"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linear_setting"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical"

android:onClick="onClick">

<TextView

android:id="@+id/textView5"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="设置"

android:textColor="#4ab4a5"

android:textSize="20dp" />

<ImageButton

android:id="@+id/设置"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#FFFFFF"

android:clickable="false"

android:contentDescription="微信"

app:srcCompat="@drawable/setting"

android:scaleType="centerInside"/>

</LinearLayout>

</LinearLayout>

2.1.4 Layout_Main.xml

代码:

<?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=".MainActivity">

<include

layout="@layout/top"

android:layout_width="match_parent"

android:layout_height="55dp"

android:layout_weight="0" />

<FrameLayout

android:id="@+id/content"

android:layout_width="match_parent"

android:layout_height="553dp"

android:layout_weight="1">

</FrameLayout>

<include

layout="@layout/bottom"

android:layout_width="match_parent"

android:layout_height="119dp"

android:layout_weight="0" />

</LinearLayout>

2.2 MainActivity代码配置


2.2.1新建四个fragment:将fragment与对应的layout文件相关联

fragment1:

public class Fragment1 extends Fragment {

//private String context;//用于获取textview的值

//private TextView mTextView;//用于获取textview控件

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment1, container, false);

//mTextView = (TextView) view.findViewById(R.id.txt_connect);

//mTextView.setText(context);

return view;

// return inflater.inflate(R.layout.fragment_connect, container, false);

}

}

fragment2:

public class Fragment2 extends Fragment {

//private String context;//用于获取textview的值

//private TextView mTextView;//用于获取textview控件

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment2, container, false);

//mTextView = (TextView) view.findViewById(R.id.txt_connect);

//mTextView.setText(context);

return view;

// return inflater.inflate(R.layout.fragment_connect, container, false);

}

}

fragment3:

public class Fragment3 extends Fragment {

//private String context;//用于获取textview的值

//private TextView mTextView;//用于获取textview控件

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment3, container, false);

//mTextView = (TextView) view.findViewById(R.id.txt_connect);

//mTextView.setText(context);

return view;

// return inflater.inflate(R.layout.fragment_connect, container, false);

}

}

fragment4:

public class Fragment4 extends Fragment {

//private String context;//用于获取textview的值

//private TextView mTextView;//用于获取textview控件

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment4, container, false);

//mTextView = (TextView) view.findViewById(R.id.txt_connect);

//mTextView.setText(context);

return view;

// return inflater.inflate(R.layout.fragment_connect, container, false);

}

}

2.2.2完善相应的四个fragment.xml

代码:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout 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"

tools:context=".Fragment1">

<!-- TODO: Update blank fragment layout -->

<TextView

android:id="@+id/txt_message"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="这是聊天界面"

android:textSize="35sp"

android:gravity="center"/>

</FrameLayout>

剩余三个同理

2.2.3编写MainActivity文件的Java代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private final Fragment fragment1=new Fragment1();

private final Fragment fragment2=new Fragment2();

private final Fragment fragment3=new Fragment3();

private final Fragment fragment4=new Fragment4();

private FragmentManager fm;

private FragmentTransaction transaction;

private LinearLayout tabChat;

private LinearLayout tabFriend;

private LinearLayout tabContect;

private LinearLayout tabSetting;

private ImageButton imgChat;

private ImageButton imgFriend;

private ImageButton imgContact;

private ImageButton imgSetting;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.layout_main);

//去掉它自带的标题框

if (getSupportActionBar() != null)

{

getSupportActionBar().hide();

}

initView();//关联对象

initFragment();//添加界面

transaction=fm.beginTransaction();

hidefragment(transaction);

//局部监听

tabChat.setOnClickListener(this);

tabFriend.setOnClickListener(this);

tabContect.setOnClickListener(this);

tabSetting.setOnClickListener(this);

}

//Fragment初始化函数

private void initFragment(){

fm=getSupportFragmentManager();

transaction=fm.beginTransaction()

.add(R.id.content,fragment1)

.add(R.id.content,fragment2)

.add(R.id.content,fragment3)

.add(R.id.content,fragment4);

transaction.commit();

}

// 找到所有的控件

private void initView() {

tabChat = findViewById(R.id.linear_char);

tabFriend = findViewById(R.id.linear_friend);

tabContect = findViewById(R.id.linear_contact);

tabSetting = findViewById(R.id.linear_setting);

imgChat = findViewById(R.id.聊天);

imgFriend = findViewById(R.id.朋友);

imgContact = findViewById(R.id.通讯录);

imgSetting = findViewById(R.id.设置);

}

//控制图片变换

private void setSelect(int i){

FragmentTransaction transaction=fm.beginTransaction();

hidefragment(transaction);

switch (i){

case 1:

transaction.show(fragment1);

imgChat.setImageResource(R.drawable.chat1);

break;

case 2:

transaction.show(fragment2);

imgFriend.setImageResource(R.drawable.friend1);

break;

case 3:

transaction.show(fragment3);

imgContact.setImageResource(R.drawable.contect1);

break;

case 4:

transaction.show(fragment4);

imgSetting.setImageResource(R.drawable.setting1);

break;

default:

break;

}

// transaction.commit();

}

//隐藏所有tab

private void hidefragment(@NonNull FragmentTransaction transaction){

transaction.hide(fragment1);

transaction.hide(fragment2);

transaction.hide(fragment3);

transaction.hide(fragment4);

transaction.commit();

}

//重写onClick方法

//用户点击哪个tab,就设置i值

public void onClick(@NonNull View v) {

resetimg();

switch (v.getId()){

case R.id.linear_char:

setSelect(1);

break;

case R.id.linear_friend:

setSelect(2);

break;

case R.id.linear_contact:

setSelect(3);

break;

case R.id.linear_setting:

setSelect(4);

break;

default:

break;

}

}

//将未点击的图片按钮还原成原来的颜色

private void resetimg(){

imgChat.setImageResource(R.drawable.chat);

imgFriend.setImageResource(R.drawable.friend);

imgContact.setImageResource(R.drawable.contect);

imgSetting.setImageResource(R.drawable.setting);

}

//最后调用函数

}

三、运行界面展示


3.1初始界面

3.2 点击聊天按钮

3.3 点击好友按钮

3.4 点击通讯录按钮

3.5 点击设置按钮

四、源码仓库地址


仓库 - 流年 (liuniantyy) - Gitee.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/50178.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UI设计,仅是画张图吗?

UI设计&#xff0c;仅是画张图吗&#xff1f; 很多时候&#xff0c;当别人问及你是做UI设计&#xff0c;会随口说&#xff1a;“哦&#xff0c;美工&#xff01;“。象这样的称呼&#xff0c;很多有UI比较早的公司&#xff08;比如金山&#xff0c;讯腾等&#xff09;&#x…

后台ui大全(有这些你就够了)

做过后台开发的都知道&#xff0c;我们后台ui基本上都是去拖一个现成的ui框架&#xff0c;然后我们在此基础上改改就差不多了&#xff0c;那该如何选择合适的后台ui呢&#xff0c;哥们那你走运了&#xff0c;我最近整理了最近用的比较多的后台ui,希望有你喜欢的一款。(后面有下…

GUI绘图界面设计

本文介绍matlab中简单的gui绘图界面设计 设计内容&#xff1a; 1、设计GUI界面&#xff1a; 2、通过下拉菜单选择绘制正弦、正切函数&#xff1b; 3、通过编辑框输入命令&#xff0c;根据命令绘制图形&#xff1b; 4、通过按钮在图形中输出标注&#xff08;标题、各轴名称&…

前端ui设计稿

每个设计师都有「像素级还原」的设计追求&#xff0c;我总结了工作几年还原设计稿的几点经验。全文10059字&#xff0c;阅读时长约21分钟。 前言 UI设计师作为展示产品形态的执行层。产品上线前走查视觉与交互还原是必经环节&#xff0c;设计师可能都遇到过一个问题&#xff0…

【UI】关于如何画设计稿(基础篇)

文章目录 前言精炼对齐重复 详尽设计的四个基础原则简介亲密性原则对齐原则重复原则对比原则 前言 设计是自己的一个爱好&#xff0c;平时看了许多相关的内容&#xff0c;做了许多功课&#xff0c;到现在也有了一些成果。介于自己的并非专业人员&#xff0c;我没有将自己这些年…

chatgpt赋能python:Python字幕滚动:如何让你的视频内容更吸引人

Python字幕滚动&#xff1a;如何让你的视频内容更吸引人 如果你是一位视频创作者&#xff0c;你可能知道如何通过字幕来增加你的视频的吸引力。Python提供了一种简单且高效的方法来制作字幕滚动。字幕滚动是指将文字逐个显示在视频下方&#xff0c;以帮助观众跟上视频的进展。…

修复网站从万年PHP7.2更新到PHP8.0后的出现的bug

写在前面 2021年5月20日23:30左右&#xff0c;因为看到了WordPress仪表盘疯狂提示“为了网站的安全和效能&#xff0c;推荐使用PHP版本7.4以上”&#xff0c;然后我终于做出了一个令我后悔至今的决定——把万年没更新的PHP7.2直接更新到PHP8.0。在更新完成的那一刻&#xff0c…

Linux 删除 颜色转义字符 乱码 \x1b

目录 Linux颜色控制 方式一&#xff1a;添加sed正则命令 方式二&#xff1a;将输出写入文件再读取 Git颜色控制 使用Python paramiko ssh 获取 git 输出时&#xff0c;出现乱码&#xff0c;实际上是终端输出的ANSI颜色转义字符&#xff0c;用于控制终端颜色展示&#xff1a;…

pl/sql developer oracle生僻字显示问题

一、问题由来 随着国标GB18030的推行&#xff0c;各行各业都在如火如荼的落实改造。自己在工作中也发现很多问题&#xff0c;查阅了很多资料都未解决自己的问题。经过慢慢摸索&#xff0c;对生僻字经常出现的问题进行总结&#xff0c;现分享如下。 二、问题描述 1. or…

解决Sublime Text打开C++文件出现中文乱码

按CtrlShiftP打开命令行&#xff0c;输入Install Package&#xff0c;回车&#xff0c;然后继续输入ConvertToUTF8&#xff0c;回车。 等安装好了以后&#xff0c;应该问题就解决了

vant官网访问被拒绝

点击下方前往“站长工具”查询对应网址youzan.github.io的DNS 站长工具 找到TTL值最小的ip地址 和需要的网址对应关系&#xff0c;配置到hosts文件中 win10 hosts文件默认路径&#xff1a;C:\Windows\System32\drivers\etc 以管理员身份打开powershell 执行命令后会打开hosts…

java路径为什么拒绝访问_为什么拒绝访问路径?

回答(26) 2 years ago 我也遇到了问题,因此我在这篇文章上磕磕绊绊 . 我在复制/删除之前和之后添加了以下代码行 . Delete File.SetAttributes(file, FileAttributes.Normal); File.Delete(file); Copy File.Copy(file, dest, true); File.SetAttributes(dest, FileAttributes…

vnc访问被拒绝怎么办,vnc访问被拒绝怎么办,为什么会被拒绝?

vnc远程控制连接被拒绝的原因,服务器作为网站建设的常用设备,在服务器运行过程中起到举足轻重的作用。用户在选择服务器是常用的方式有服务器租用、虚拟主机租用以及服务器托管,通过进行文件以及数据的下载、上传等实现网站的更新,但无论选择哪一种方式都会遇到无法连接服务…

如何拒绝国外IP/屏蔽国外IP访问服务器?

如何拒绝国外IP/屏蔽国外IP访问服务器&#xff1f; 背景介绍公网上的服务器更容易受到攻击 解决方案大多国内公司的服务器都是面向国内用户 实现步骤整理IP地址段到Ipset1、下载IP地址段文件2、将IP地址段转换为Ipset指令3、Ipset写入地址段数据 在Iptables中调用Ipset的 china…

N的阶乘末尾0的个数 (python)

分析 对N的阶乘进行质因子分解&#xff0c;N! ()&#xff0c;由于&#xff0c;所以0的个数只与X和Z有关&#xff0c;每一对2和5相乘可以得到一个10&#xff0c;于是有0的个数等于min(X,Z)&#xff0c;不难看出X大于Z。所以0的个数只与Z有关。 解法 1 要计算Z&#xff0c;最…

2022-2028全球与中国虚拟数字人市场现状及未来发展趋势

辰宇信息咨询市场调研公司最近发布-《2022-2028全球与中国虚拟数字人市场调研报告》 内容摘要 本文重点分析在全球及中国有重要角色的企业,分析这些企业虚拟数字人产品的市场规模、市场份额、市场定位、产品类型以及发展规划等。主要企业包括: 微软 歌力思 克理…

虚拟数字人市场现状研究分析-

辰宇信息咨询市场调研公司最近发布-《2022-2028中国虚拟数字人市场现状研究分析与发展前景预测报告》 内容摘要 本文研究中国市场虚拟数字人现状及未来发展趋势,侧重分析在中国市场扮演重要角色的企业,重点呈现这些企业在中国市场的虚拟数字人收入、市场份额、市场定位、…

2018中国方案商500强榜单

https://mp.weixin.qq.com/s/qOXO9AScoK8M8ez-AxrLCQ 2018中国方案商500强榜单 中国IT生态大会 特大号 7月30日 中国方案商500强&#xff08;VAR500&#xff09;&#xff0c;是由商业伙伴咨询机构推出的每年一度的大型调查评选活动。2018年中国方案商500强&#xff0c;由方案…

虚拟数字人市场现状研究分析报告 -

辰宇信息咨询市场调研公司最近发布-《2022-2028中国虚拟数字人市场现状研究分析与发展前景预测报告 》 内容摘要 本文研究中国市场虚拟数字人现状及未来发展趋势,侧重分析在中国市场扮演重要角色的企业,重点呈现这些企业在中国市场的虚拟数字人收入、市场份额、市场定位、…

需不需要给数字人装上ChatGPT ?多家公司是这样回应的

近年来&#xff0c;随着人工智能的快速发展&#xff0c;数字人与ChatGPT这样的语言模型的结合引起了广泛的关注和讨论。ChatGPT是一种强大的对话生成模型&#xff0c;能够模拟自然语言交流&#xff0c;并在各种领域提供个性化的服务。然而&#xff0c;关于给数字人装上ChatGPT是…