android中实现简单的聊天功能
这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~
主要还是展示RecyclerView控件的使用吧~
参考我之前写的文章:
1、先添加一个关于聊天内容的Chat.java类:
- package com.example.chenrui.common;
- public class Chat {
- private String targetUser;
- private String content;
- public Chat(String targetUser, String content) {
- this.targetUser = targetUser;
- this.content = content;
- }
- public String getTargetUser() {
- return targetUser;
- }
- public void setTargetUser(String targetUser) {
- this.targetUser = targetUser;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- }
Chat.java这个类有两个属性:聊天对象和聊天内容
2、添加一个RecyclerView控件子项chat_item.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="wrap_content"
- android:orientation="vertical">
- <TextView
- android:id="@+id/chatText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/chat"
- android:gravity="center_vertical"
- android:text="TextView" />
- </LinearLayout>
3、添加RecyclerView控件的适配器ChatAdapter.java类:
- package com.example.chenrui.app1;
- import android.support.annotation.NonNull;
- import android.support.v7.widget.RecyclerView;
- import android.util.Log;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import com.example.chenrui.common.Chat;
- import java.util.List;
- public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
- private List<Chat> chatList;
- public ChatAdapter(List<Chat> chatList) {
- this.chatList = chatList;
- }
- @NonNull
- @Override
- public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
- View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_item,viewGroup,false);
- ViewHolder viewHolder = new ViewHolder(view);
- return viewHolder;
- }
- @Override
- public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
- Chat chat = chatList.get(i);
- viewHolder.chatText.setText(chat.getContent());
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(viewHolder.chatText.getLayoutParams());
- if(chat.getTargetUser().equals("张三")) {
- params.gravity = Gravity.LEFT;
- } else {
- params.gravity = Gravity.RIGHT;
- }
- viewHolder.chatText.setLayoutParams(params);
- }
- @Override
- public int getItemCount() {
- return chatList.size();
- }
- static class ViewHolder extends RecyclerView.ViewHolder {
- TextView chatText;
- public ViewHolder(@NonNull View itemView) {
- super(itemView);
- chatText = itemView.findViewById(R.id.chatText);
- }
- }
- }
上面的代码,设置的是,如果聊天对象是张三,就把聊天内容显示在列表的左侧,否则就显示在列表的右侧。这个是模拟自己和别人对话的展示效果
4、最后就是主Activity了
activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.constraint.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">
- <android.support.v7.widget.RecyclerView
- android:id="@+id/chatList"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
- app:layout_constraintTop_toTopOf="parent" />
- <LinearLayout
- android:id="@+id/linearLayout3"
- android:layout_width="match_parent"
- android:layout_height="50dp"
- android:background="@android:color/darker_gray"
- android:orientation="horizontal"
- app:layout_constraintBottom_toTopOf="@+id/linearLayout4">
- <Spinner
- android:id="@+id/targetUser"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
- <EditText
- android:id="@+id/chatContent"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="3"
- android:inputType="textPersonName" />
- </LinearLayout>
- <LinearLayout
- android:id="@+id/linearLayout4"
- android:layout_width="match_parent"
- android:layout_height="50dp"
- android:orientation="horizontal"
- app:layout_constraintBottom_toBottomOf="parent">
- <Button
- android:id="@+id/chatSubmit"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:text="发言" />
- </LinearLayout>
- </android.support.constraint.ConstraintLayout>
MainActivity.java
- package com.example.chenrui.app1;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Spinner;
- import com.example.chenrui.common.Chat;
- import java.util.ArrayList;
- import java.util.List;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- final RecyclerView chatList = findViewById(R.id.chatList);
- final List<Chat> chatData = new ArrayList<Chat>();
- final ChatAdapter chatAdapter = new ChatAdapter(chatData);
- chatList.setAdapter(chatAdapter);
- LinearLayoutManager layoutManager = new LinearLayoutManager(this);
- chatList.setLayoutManager(layoutManager);
- final Spinner targetUser = findViewById(R.id.targetUser);
- String[] data = {"张三","李四"};
- ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.support_simple_spinner_dropdown_item,data);
- targetUser.setAdapter(adapter);
- final EditText chatContent = findViewById(R.id.chatContent);
- Button chatSubmit = findViewById(R.id.chatSubmit);
- chatSubmit.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if(!chatContent.getText().toString().equals("")) {
- String user = targetUser.getSelectedItem().toString();
- chatData.add(new Chat(user, chatContent.getText().toString()));
- chatAdapter.notifyItemInserted(chatData.size() - 1);
- chatList.scrollToPosition(chatData.size() - 1);
- chatContent.setText("");
- }
- }
- });
- }
- }
显示效果:
android中实现简单的聊天功能的更多相关文章
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- MVP架构在xamarin android中的简单使用
好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...
- 采用tcp协议和UDP协议实现简单的聊天功能
Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义 ...
- EventBus在Android中的简单使用
EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功 ...
- Android中禁止SlidingPaneLayout的侧滑功能
Android中使用android.support.v4.widget.SlidingPaneLayout实现侧滑功能的时候,可能出现滑动屏幕时与SlidingPaneLayout的侧滑发生冲突,查看 ...
- Gradle在Android中的简单使用
Gradle在Android中简单的使用 还望支持个人博客站:http://www.enjoytoday.cn Android Studio 使用gradle进行工程构建,为了更好的了解整个andro ...
- Java中使用UDP实现简单的聊天功能
通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: import java.io.IOException; import java.net.*; im ...
- Android中使用ShareSDK集成分享功能
引言 现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了 ...
- android 中Log - 简单使用
例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 ...
随机推荐
- Linux init 0-6 启动级别
原文地址:http://blog.sina.com.cn/s/blog_5f8e8d9801010wlr.html 原文地址:[转]Linux init 0-6 启动级别作者:流水清风 init 0- ...
- 添加类似navigationController自带的返回按钮
添加类似navigationController自带的返回按钮,效果如下: 一.UINavigationcontroller自带的navigationBar 是无法添加左箭头的返回按钮的 在网上搜索了 ...
- dev的documentManager,多个tab窗体
private void AddDocument(Funcation CurrentModel) { if (!string.IsNullOrWhiteSpace(CurrentModel.Funct ...
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...
- Linux学习4-阿里云服务器(CentOS)下使用 Tomcat安装 Jenkins
前言 通常做自动化测试,需要用到jenkins来做持续集成,那么linux系统里面如何使用tomcat安装Jenkins环境呢? 前面一篇已经搭建好java和tomcat环境,接着直接下载jenkin ...
- rtsp实现的开源代码
* live.com C/S C++ http://www.live555.com * darwin S C++ http://www.opensource.apple ...
- 替换NSUserDefaults的方案
替换NSUserDefaults的方案 效果 源码 https://github.com/YouXianMing/iOS-Utilities // // BaseValueStorageManager ...
- SpringBoot下的Job定时任务
编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务使用的非常方便,下面总结一下如何使用: 一,@schedul ...
- 开源项目DataTimePicker实现时间和日期的选择
这个开源项目是模仿Google官方的time选择器做的,是否漂亮.让我爱不释手,真心喜欢.很有幸和大家一起分享下,那么话不多说开始讲解. 开源项目地址:https://github.com/fl ...
- executing external native build for cmake
进一步调试的方法: 在Android studio下方打开terminal,然后: gradlew build --stacktrace