《Android Studio开发实战》学习(二)- 聊天室

  • 背景
  • 聊天室布局文件的编写
  • 聊天室代码文件的编写
  • 运行结果

背景

在前一篇文章 1中实现了使用Android Studio开发Hello World App 2,在这里继续研究Android Studio的使用方法,熟悉简单控件TextView的使用。本文的目标是开发一个简单的聊天室App,实现点击聊天室窗口添加一条聊天记录,长按聊天窗口可以清除所有聊天记录的功能。

聊天室布局文件的编写

一个简单的聊天室布局如下:

  • 标题,居中显示一行文字“聊天室效果,点击添加聊天记录,长按删除聊天记录”,高度为10%,宽度为整个屏幕;
  • 聊天记录窗口,高度为90%,宽度为整个屏幕,点击在聊天记录窗口添加一句随机文本,并附上时间戳,长按清除文本。

为了实现百分比布局,可以在ConstraintLayout中采用添加辅助线(Guideline)的方法 3。在这个聊天室中,可以在0.10的位置添加一条水平辅助线,这样标题、聊天窗口的比例就是10%,90%。然后把2个textview的layout_width和layout_height都设置为0,用辅助线来限制 4

activity_main.xml的完整代码如下:

<?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=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/guideline_1"app:layout_constraintGuide_percent=".10"android:orientation="horizontal"/><TextViewandroid:id="@+id/tv_control"android:layout_width="0dp"android:layout_height="0dp"android:gravity="center"android:text="聊天室效果,点击添加聊天记录,长按删除聊天记录"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="@+id/guideline_1" /><TextViewandroid:id="@+id/tv_bbs"android:layout_width="0dp"android:layout_height="0dp"android:scrollbars="vertical"android:textColor="#000000"android:textSize="17sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline_1"app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

聊天室代码文件的编写

布局文件activity_main.xml写好了,然后就要编写代码文件MainActivity.java。思路是建立两个TextView变量,在onCreate()方法中用findViewById()方法与上面设计的2个TextView控件对应,然后在tv_bbs控件上绑定点击和长按监听器。

MainActivity.java的完整代码如下:

package com.example.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import android.view.View;
import android.view.View.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.text.method.ScrollingMovementMethod;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {private TextView tv_bbs;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_bbs = findViewById(R.id.tv_bbs);tv_bbs.setMovementMethod(new ScrollingMovementMethod());OnClickListener clickT = new ClickTAction();OnLongClickListener clickL = new ClickLAction();tv_bbs.setOnClickListener(clickT);tv_bbs.setOnLongClickListener(clickL);}private final String[] mChatStr = {"您用餐了吗?","今天是个好日子。","我赢了!","我们去看电影,好吗?","我晚上做什么好呢?" };private class ClickTAction implements OnClickListener {@Overridepublic void onClick(View v) {if (v.getId() == R.id.tv_bbs) {int r = (int)(Math.random()*10) % 5;String s = String.format("%s\n%s %s", tv_bbs.getText().toString(), getNowTime(), mChatStr[r]);tv_bbs.setText(s);}}}private class ClickLAction implements OnLongClickListener {@Overridepublic boolean onLongClick(View v) {if (v.getId() == R.id.tv_bbs) {tv_bbs.setText("");}return true;}}private String getNowTime() {SimpleDateFormat s = new SimpleDateFormat("HH:mm:ss");return s.format(new Date());}
}

ClickTActionClickLAction是两个分别实现了View.OnClickListenerView.OnLongClickListener接口的类,这两个类可以作为公共类MainActivity的内部类 5

chatStr数组存放了要显示的聊天文本,getNowTime()方法是个自编的函数,用来获取当前的系统时间 6

为了实现文本的显示,需要使用基本控件TextView。TextView是最基础的文本显示控件 2,用于在界面上显示文本信息 7。在布局文件activity_main.xml中,可以设置TextView的text属性,以改变显示文本的内容。textColor属性用于改变显示文本的颜色,textSize属性用于改变字体大小。scrollbars属性用来使文本视图能够上下滑动,显示区域外的文字 8,添加这个属性要同时在代码文件中添加一句:

tv_bbs.setMovementMethod(new ScrollingMovementMethod());

运行结果

按之前探索的方法 1生成APK文件,然后传输到手机上运行。


  1. 《Android Studio开发实战》学习(一)- Hello World_下唐人的博客-CSDN博客 ↩︎ ↩︎

  2. 欧阳燊. Android Studio开发实战. 清华大学出版社. 2017. ↩︎ ↩︎

  3. androidx.percentlayout.widget | Android Developers ↩︎

  4. ConstraintLayout使用 - 简书 ↩︎

  5. Core Java Volume I - Fundamentals (10th Edition), Cay S. Horstmann著. 周立新等译. 机械工业出版社. 2016.8 ↩︎

  6. bangying4224. Android Studio开发获取本地时间. CSDN博客 ↩︎

  7. 熊猫大哥大. Android Studio 文本控件TextView. CSDN博客 ↩︎

  8. 使TextView在Android上可滚动_慕课猿问 ↩︎

《Android Studio开发实战》学习(二)- 聊天室相关推荐

  1. 《Android Studio开发实战》学习(三)- 展示图片

    <Android Studio开发实战>学习(三)- 展示图片 背景 问题描述 将图片添加到Android Studio资源中 图像视图ImageView的使用 关闭APP中标题的显示 图 ...

  2. 《Android Studio开发实战》学习(五) - 截图

    <Android Studio开发实战>学习(五) - 截图 背景 页面布局 布局文件的编写 代码文件的编写 ImageView控件截图的原理 运行结果 背景 在这里继续学习Android ...

  3. 《Android Studio开发实战》学习(一)- Hello World

    <Android Studio开发实战>学习(一)- Hello World 背景 Android Studio的安装 Android Studio的启动和运行 运行小应用Hello Wo ...

  4. 《Android Studio开发实战》学习(六)- 下拉框

    <Android Studio开发实战>学习(六)- 下拉框 背景 下拉框Spinner的使用 数组适配器ArrayAdapter的使用 简单适配器SimpleAdapter的使用 布局文 ...

  5. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  6. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  7. Android 蓝牙开发(一) -- 传统蓝牙聊天室

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 一.蓝牙概览 以下是蓝牙的介绍,来自维基百科: 蓝牙(英语: ...

  8. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

  9. 新书推荐:《Android Studio开发实战:从零基础到App上线》终章

    <Android Studio开发实战:从零基础到App上线>是一部Android开发的实战教程,由浅入深.由基础到高级,带领读者一步一步走进App开发的神奇世界. 全书共分为16章.其中 ...

最新文章

  1. html怎么查看cad文件,如何直接查看CAD格式的图纸
  2. swift_009(Swift 类型别名/安全/推断)
  3. 127 - Accordian Patience
  4. Python深度学习之搭建小型卷积神经网络(Kaggle网站Dogs-vs-Cats数据集)
  5. Mybatis深入了解(四)----输入输出映射
  6. MySQL的user表
  7. mysql六:索引原理与慢查询优化
  8. 电脑运行adb闪退_adb+python进阶使用
  9. .h .dll .lib
  10. Adtran加入SDN大潮,剑指运营商SDN转型
  11. BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
  12. 004.麻雀虽小五脏俱全--最简单的JavaWeb
  13. 高清渐变动态壁纸来了 手把手教你做动态壁纸
  14. 一个农村小伙的淘宝创业故事
  15. npm run build时报错“caniuse-lite is outdated”
  16. 七天学习Go语言-从0-0.05
  17. 微信拼车小程序无服务器,滴滴顺风车下架 拼车微信小程序笑了
  18. flyingsaucer转换多个html,如何在将PDF转换为HTML的同时在Flying-Saucer中设置基本URL?...
  19. AnyPi智能语音音箱方案 智能蓝牙WIFI音箱方案开发 DuerOS及Alexa平台
  20. 男人凭什么三十而立——这个第一是我的

热门文章

  1. java base64转图片
  2. Python编程基础:函数的使用
  3. Ajax的使用(详解)
  4. 数据库课程设计(DatabaseCourseDesign)
  5. 在Visual Studio中添加数据库和.xsd文件(DataSet)
  6. python修改sheet名称_openpyxl修改sheet名,sheet颜色,删除sheet的方法
  7. Java中出现[Ljava.lang.String的问题
  8. pytest的mark功能
  9. python简单小游戏代码-python基础练习之几个简单的游戏
  10. 《C++primer》第10章:泛型算法