安卓 类微信界面实现

目录

1.引言

2.实现

1.写出顶部和底部的layout

2.主页面

3.写四个fragment用于显示不同的内容

4.写MainActivity中的代码

 3.总结



1.引言

这是我第一次接触安卓的开发,因为之前学过c#和java,感觉使用AS开发就像使用java在写winform,同样是放置控件,设置控件属性,同样的获取控件对象,监听事件。当然这样说太肤浅了一些,毕竟也是初学,只是发表初学者的一些小观点。下面是实现过程。

2.实现

1.写出顶部和底部的layout

      顶部和底部分别为bottom.xml和top.xml,样式设置如下,注意bottom不需要放在底部,因为后续放在main.xml中的时候,FrameLayout权重设置为1,会将头顶部撑开。

top.xml没什么难度,自己尝试一下就可以写出来

bottom.xml需要熟练使用LinearLayout布局,同时包括了imageView使用,代码如下:

<?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:id="@+id/bottm_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#D6D6D6"><LinearLayoutandroid:id="@+id/tap01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_weight="1"><ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="match_parent"app:srcCompat="@drawable/message02" /><TextViewandroid:id="@+id/textView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="微信" /></LinearLayout><LinearLayoutandroid:id="@+id/tap02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView2"android:layout_width="match_parent"android:layout_height="match_parent"app:srcCompat="@drawable/friends" /><TextViewandroid:id="@+id/textView2"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="朋友" /></LinearLayout><LinearLayoutandroid:id="@+id/tap03"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView3"android:layout_width="match_parent"android:layout_height="match_parent"app:srcCompat="@drawable/founding" /><TextViewandroid:id="@+id/textView3"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="发现" /></LinearLayout><LinearLayoutandroid:id="@+id/tap04"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView4"android:layout_width="match_parent"android:layout_height="wrap_content"app:srcCompat="@drawable/mine" /><TextViewandroid:id="@+id/textView4"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="我的" /></LinearLayout>
</LinearLayout>

2.主页面

  主页面main.xml就是将写好的top和bottom引用进来,中间放一个FrameLayout显示内容,如下

<include>在代码中写出,格式如下:

<includelayout="@layout/top"android:layout_width="match_parent"android:layout_height="wrap_content"></include>

3.写四个fragment用于显示不同的内容

  由于微信主页面包括四个大模块,“消息”,“朋友”,“发现”和“我的”,所以需要四个fragment来显示这些内容,格式基本一致,拿消息页面举例,格式如下

  接下来只要在MainActivty中编写代码将这四个页面添加进FrameLayout,并通过监听按钮来点击切换不同页面就可以了。

4.写MainActivity中的代码

  通过代码来将各个组件联系在一起,并实现切换效果,代码如下:(附注释)

package com.example.myapp;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
/*implements View.OnClickListener 实现点击监听的接口,@override注解*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {/*创建四个Fragment对象*/private Fragment weixin_Fragment;private Fragment context_Fragment;private Fragment friend_Fragment;private Fragment setting_Fragment;/*创建一个FragmentManager和FragmentTransaction*/private FragmentManager fm;private FragmentTransaction transaction;/*创建四个LinearLayout和四个ImageView*/private LinearLayout tab01,tab02,tab03,tab04;private ImageView img01,img02,img03,img04;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);/*将四个Fragment对象创建为对应的Fragment*/weixin_Fragment = new Weixin_Fragment();context_Fragment = new Context_Fragment();friend_Fragment = new FriendFragment();setting_Fragment = new Setting_Fragment();/*通过findViewById找到四个按钮和四个图标*/tab01 = findViewById(R.id.tap01);tab02 = findViewById(R.id.tap02);tab03 = findViewById(R.id.tap03);tab04 = findViewById(R.id.tap04);img01 = findViewById(R.id.imageView1);img02 = findViewById(R.id.imageView2);img03 = findViewById(R.id.imageView3);img04 = findViewById(R.id.imageView4);fm = getSupportFragmentManager();/*页面初始函数*/initialFragment();/*为四个按钮绑定点击监听*/tab01.setOnClickListener(this);tab02.setOnClickListener(this);tab03.setOnClickListener(this);tab04.setOnClickListener(this);}private void initialFragment() {FragmentTransaction transaction = fm.beginTransaction();transaction.add(R.id.id_content,weixin_Fragment);transaction.add(R.id.id_content,friend_Fragment);transaction.add(R.id.id_content,context_Fragment);transaction.add(R.id.id_content,setting_Fragment);Hide(transaction);transaction.show(weixin_Fragment);transaction.commit();}/*实现点击监听接口,一旦点击按钮,便会触发,通过分支结构来判断显示对应的内容*/@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.tap01: show(1);break;case R.id.tap02: show(2);break;case R.id.tap03: show(3);break;case R.id.tap04: show(4);break;default:break;}}/*显示内容*/private void show(int i) {FragmentTransaction transaction=fm.beginTransaction();Hide(transaction);switch (i){case 1:transaction.show(weixin_Fragment);/*先将图标置为未点击状态*/ResetImage();/*设置图标图片*/img01.setImageResource(R.drawable.message02);break;case 2:transaction.show(friend_Fragment);ResetImage();img02.setImageResource(R.drawable.friends02);break;case 3:transaction.show(context_Fragment);ResetImage();img03.setImageResource(R.drawable.founding02);break;case 4:transaction.show(setting_Fragment);ResetImage();img04.setImageResource(R.drawable.mine02);break;default:break;}transaction.commit();}/*隐藏Fragment*/private void Hide(FragmentTransaction transaction) {transaction.hide(weixin_Fragment);transaction.hide(friend_Fragment);transaction.hide(context_Fragment);transaction.hide(setting_Fragment);}/*将图标设置为未点击*/private void ResetImage(){img01.setImageResource(R.drawable.message);img02.setImageResource(R.drawable.friends);img03.setImageResource(R.drawable.founding);img04.setImageResource(R.drawable.mine);}
}

 效果如下:

 3.总结

  虽然这个项目看上去很简单,但是对于初学者,在实现的过程中还是有不少问题。因为对开发流程的不熟练,对属性的不了解,以及粗心大意,都会造成一些小问题,而这些小问题积累起来就变成了最大的绊脚石,比如由于将android:layout_weight写成了tools:layout_weight,造成按钮分布不均的情况,排查这些小问题大大阻碍了开发进度,所以写代码在于精而不在于快,这一点我深有体会。

代码仓库:杨少杰/MyAPP

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

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

相关文章

安卓开发之设计微信界面

一、功能需求 完成一个类似微信页面的布局&#xff0c;要求&#xff1a; 页面最上方是标题居中页面中间界面显示内容&#xff0c;内容随下方栏的选择而切换页面最下方有四个按钮点击按钮后&#xff0c;按钮图标会变换颜色&#xff0c;且显示框变换内容 项目大致框架如下&…

干货!几招教你降低论文重复率!!

相信大家已经开始为毕业论文奋战了&#xff0c;甚至有的学校已经答辩结束了。今天&#xff0c;小编就说说史上最奇葩智能系统——知网论文检测系统&#xff0c;并且告诉大家躲避查重的几个大招。 各个学校对所谓论文原创度的标准要求不同&#xff0c;碰到要求重复率在30%或20%以…

最简单的 6 种防止数据重复提交的方法!(干货)

有位朋友&#xff0c;某天突然问磊哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f; 这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。 于是磊哥问他&#xff0c;是单机环境还是分布…

如何降重计算机SCI论文的重复率? - 易智编译EaseEditing

介绍几种降重方法&#xff1a; 1“中英中”互换法 用翻译软件先翻译成英文&#xff0c; 再翻译回中文&#xff0c;之后手工修改润色一下&#xff0c; 这样换了一种表达句式&#xff0c;但愿文意思没有改变。 值得一提的是&#xff0c;现在中英文互译软件已经非常强大了&…

对文本文件中出现的词进行次数统计

主要涉及读取文本文件、统计词出现的数目、排序、隐藏函数lambda。 随便从网页复制一篇文章保存成“train.txt”&#xff0c;采用以下代码读取txt文件&#xff1a; def load_stop_words(file "stopwords.txt"):with open(file,"r",encoding"utf-8&…

最简单的6种防止数据重复提交的方法!(干货)

有位朋友&#xff0c;某天突然问磊哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f; 这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。 于是磊哥问他&#xff0c;是单机环境还是分布…

马斯克成立人工智能公司X.AI:对抗ChatGPT 已买1万个GPU

雷递网 雷建平 4月15日 根据内华达州的一份文件&#xff0c;特斯拉CEO埃隆马斯克 (Elon Musk) 已经成立了一家名为X.AI Corp的新人工智能公司。马斯克为X.AI Corp的唯一董事&#xff0c;而贾里德伯查尔&#xff0c;马斯克家族办公室的董事则是其秘书。 X.AI已允许出售这家私人持…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

基于blinker的 microPython 小爱同学

官方没有基于esp8266 esp32的microPython 的SDK 翻了 c源码 照葫芦画瓢画出了 这个 100行左右 里面有个设置设备类型的链接 需要手动设置一次 然后就可以进米家绑定其他设备同步到小爱同学啦 比官方的几百K缩小了很多 不过在官方源码翻协议倒是翻了一晚上。 https://download…

集美大学及集美大学诚毅学院的课表导入小爱同学

引言 由于学校教务系统在使用上存在一定的不便&#xff0c;无法在手机上简单地查看课程表&#xff0c;往往都需要通过截图的形式在手机上保存以供上课过程中查阅。本教程将介绍一种将集美大学及集美大学诚毅学院的课程表导入到小爱同学中的方法。 选择小爱课程表的理由是觉得市…

基于微信小程序的网上订餐系统 报告+任务书+开题报告+文献综述+中期PPT+外文翻译及原文+PPT+项目源码及数据库文件

摘要 随着微信小程序的飞速发展&#xff0c;很多系统随之兴起&#xff0c;微信已经是我们生活中的一部分&#xff0c;可不单单是人们用于沟通聊天的工具。还有很多公告平台、小程序也随之发展。大部分公众平台都只起到了一个信息消息的推送或者浏览的作用&#xff0c;而小程序的…

蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表使用说明

文章目录 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表详细教学视频演示一、自我介绍二、使用说明1.使用条件2.读入数据 总结and已知问题 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小…

基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT)

毕业设计&#xff08;论文&#xff09; &#xff08; 20 届&#xff09; 论文&#xff08;设计&#xff09;题目 基于Javamail的邮件收发系统 作 者 二级学院、专业 班 级 指导教师&#xff08;职称&#xff09; 论 文 字 数 论文完成时间 20年月日 基于JavaMail的邮件…

电脑打不开网页,能ping通,能上QQ,解决办法。

方法一 修改网络配置 因为网络配置不正确无法访问外网的情况。 解决办法&#xff1a; WINR —>在运行里面输入cmd 输入 ipconfig 查看网络配置是否正确 如果不正确&#xff0c;右击网络–>属性–>更改适配器设置–>右击你现在连接的外网的–>属性–>双击…

计算机微信接收excel打不开怎么回事,电脑端微信打不开怎么解决

电脑端微信大家相信大家都用过了&#xff0c;但是有时候出现打不开情况怎么解决呢。下面由学习啦小编为你整理了电脑端微信网页版打不开怎么办的相关方法&#xff0c;希望对你有帮助! 电脑端微信网页版打不开解决方法如下 打开浏览器&#xff0c;点“工具”→“管理加载项”那里…

微信粤语语音转文字 讯飞输入法更懂粤语直出文字

微信语音转文字功能在一定程度上缓解了语音消息的压力。但是&#xff0c;如果对方讲的是方言怎么办&#xff1f;日前&#xff0c;腾讯微信团队发微博称&#xff0c;广东地区用户支持粤语语音转文字功能。然而广东以外的广东人怎么办&#xff1f;网友们表示&#xff1a;用讯飞输…

仿微信语音输入页面(讯飞语音)

boss最近提出新的需求&#xff0c;说是项目中的语音输入&#xff08;讯飞语音&#xff09;界面不够友好&#xff0c;要求按照微信语音输入界面进行修改&#xff0c;于是乎有了本篇文章。 项目中用到的语音输入采用的是讯飞的SDK。集成讯飞语音输入&#xff0c;请参考官方文档。…

【效率神器】电脑上实现语音输入文字

标签&#xff1a;【效率神器】PC端语音输入文字&#xff0c;电脑端语音输入文字&#xff0c;如何轻松在电脑上实现语音输入 有时候电脑端打文字还是比较麻烦的&#xff0c;用语音转成文字输入还是比较简单的&#xff0c;而且速度快。那么电脑端怎么通过语音输入了&#xff1f;…

Voice input 语音输入

Voice input 语音输入 Voice is one of the three key forms of input on HoloLens. It allows you to directly command a hologram without having to use gestures. You simply gaze at a hologram and speak your command. Voice input can be a natural way to communic…

语音识别打字软件

广告关闭 2017年12月&#xff0c;云社区对外发布&#xff0c;从最开始的技术博客到现在拥有多个社区产品。未来&#xff0c;我们一起乘风破浪&#xff0c;创造无限可能。 腾讯云语音识别服务开放实时语音识别、一句话识别和录音文件识别三种服务形式&#xff0c;满足不同类型…