这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~

主要还是展示RecyclerView控件的使用吧~

参考我之前写的文章:

android中RecyclerView控件的使用

android中使用Nine-Patch图片

1、先添加一个关于聊天内容的Chat.java类:

  1. package com.example.chenrui.common;
  2.  
  3. public class Chat {
  4.  
  5. private String targetUser;
  6. private String content;
  7.  
  8. public Chat(String targetUser, String content) {
  9. this.targetUser = targetUser;
  10. this.content = content;
  11. }
  12.  
  13. public String getTargetUser() {
  14. return targetUser;
  15. }
  16.  
  17. public void setTargetUser(String targetUser) {
  18. this.targetUser = targetUser;
  19. }
  20.  
  21. public String getContent() {
  22. return content;
  23. }
  24.  
  25. public void setContent(String content) {
  26. this.content = content;
  27. }
  28. }

Chat.java这个类有两个属性:聊天对象和聊天内容

2、添加一个RecyclerView控件子项chat_item.xml,这个是实现了聊天内容项的展示:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical">
  6.  
  7. <TextView
  8. android:id="@+id/chatText"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:background="@drawable/chat"
  12. android:gravity="center_vertical"
  13. android:text="TextView" />
  14. </LinearLayout>

3、添加RecyclerView控件的适配器ChatAdapter.java类:

  1. package com.example.chenrui.app1;
  2.  
  3. import android.support.annotation.NonNull;
  4. import android.support.v7.widget.RecyclerView;
  5. import android.util.Log;
  6. import android.view.Gravity;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.LinearLayout;
  11. import android.widget.TextView;
  12.  
  13. import com.example.chenrui.common.Chat;
  14.  
  15. import java.util.List;
  16.  
  17. public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
  18.  
  19. private List<Chat> chatList;
  20.  
  21. public ChatAdapter(List<Chat> chatList) {
  22. this.chatList = chatList;
  23. }
  24.  
  25. @NonNull
  26. @Override
  27. public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  28. View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_item,viewGroup,false);
  29. ViewHolder viewHolder = new ViewHolder(view);
  30. return viewHolder;
  31. }
  32.  
  33. @Override
  34. public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
  35. Chat chat = chatList.get(i);
  36. viewHolder.chatText.setText(chat.getContent());
  37. LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(viewHolder.chatText.getLayoutParams());
  38. if(chat.getTargetUser().equals("张三")) {
  39. params.gravity = Gravity.LEFT;
  40. } else {
  41. params.gravity = Gravity.RIGHT;
  42. }
  43. viewHolder.chatText.setLayoutParams(params);
  44. }
  45.  
  46. @Override
  47. public int getItemCount() {
  48. return chatList.size();
  49. }
  50.  
  51. static class ViewHolder extends RecyclerView.ViewHolder {
  52.  
  53. TextView chatText;
  54.  
  55. public ViewHolder(@NonNull View itemView) {
  56. super(itemView);
  57.  
  58. chatText = itemView.findViewById(R.id.chatText);
  59. }
  60. }
  61. }

上面的代码,设置的是,如果聊天对象是张三,就把聊天内容显示在列表的左侧,否则就显示在列表的右侧。这个是模拟自己和别人对话的展示效果

4、最后就是主Activity了

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".MainActivity">
  8.  
  9. <android.support.v7.widget.RecyclerView
  10. android:id="@+id/chatList"
  11. android:layout_width="match_parent"
  12. android:layout_height="0dp"
  13. app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
  14. app:layout_constraintTop_toTopOf="parent" />
  15.  
  16. <LinearLayout
  17. android:id="@+id/linearLayout3"
  18. android:layout_width="match_parent"
  19. android:layout_height="50dp"
  20. android:background="@android:color/darker_gray"
  21. android:orientation="horizontal"
  22. app:layout_constraintBottom_toTopOf="@+id/linearLayout4">
  23.  
  24. <Spinner
  25. android:id="@+id/targetUser"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="1" />
  29.  
  30. <EditText
  31. android:id="@+id/chatContent"
  32. android:layout_width="wrap_content"
  33. android:layout_height="wrap_content"
  34. android:layout_weight="3"
  35. android:inputType="textPersonName" />
  36. </LinearLayout>
  37.  
  38. <LinearLayout
  39. android:id="@+id/linearLayout4"
  40. android:layout_width="match_parent"
  41. android:layout_height="50dp"
  42. android:orientation="horizontal"
  43. app:layout_constraintBottom_toBottomOf="parent">
  44.  
  45. <Button
  46. android:id="@+id/chatSubmit"
  47. android:layout_width="wrap_content"
  48. android:layout_height="match_parent"
  49. android:layout_weight="1"
  50. android:text="发言" />
  51. </LinearLayout>
  52.  
  53. </android.support.constraint.ConstraintLayout>

MainActivity.java

  1. package com.example.chenrui.app1;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.support.v7.widget.LinearLayoutManager;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.view.View;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.Spinner;
  12.  
  13. import com.example.chenrui.common.Chat;
  14.  
  15. import java.util.ArrayList;
  16. import java.util.List;
  17.  
  18. public class MainActivity extends AppCompatActivity {
  19.  
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24.  
  25. final RecyclerView chatList = findViewById(R.id.chatList);
  26.  
  27. final List<Chat> chatData = new ArrayList<Chat>();
  28. final ChatAdapter chatAdapter = new ChatAdapter(chatData);
  29. chatList.setAdapter(chatAdapter);
  30. LinearLayoutManager layoutManager = new LinearLayoutManager(this);
  31. chatList.setLayoutManager(layoutManager);
  32.  
  33. final Spinner targetUser = findViewById(R.id.targetUser);
  34. String[] data = {"张三","李四"};
  35. ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.support_simple_spinner_dropdown_item,data);
  36. targetUser.setAdapter(adapter);
  37.  
  38. final EditText chatContent = findViewById(R.id.chatContent);
  39.  
  40. Button chatSubmit = findViewById(R.id.chatSubmit);
  41. chatSubmit.setOnClickListener(new View.OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. if(!chatContent.getText().toString().equals("")) {
  45. String user = targetUser.getSelectedItem().toString();
  46. chatData.add(new Chat(user, chatContent.getText().toString()));
  47.  
  48. chatAdapter.notifyItemInserted(chatData.size() - 1);
  49. chatList.scrollToPosition(chatData.size() - 1);
  50. chatContent.setText("");
  51. }
  52. }
  53. });
  54. }
  55. }

显示效果:

android中实现简单的聊天功能的更多相关文章

  1. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  2. MVP架构在xamarin android中的简单使用

    好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...

  3. 采用tcp协议和UDP协议实现简单的聊天功能

    Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: ​ 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. ​ 转义 ...

  4. EventBus在Android中的简单使用

    EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功 ...

  5. Android中禁止SlidingPaneLayout的侧滑功能

    Android中使用android.support.v4.widget.SlidingPaneLayout实现侧滑功能的时候,可能出现滑动屏幕时与SlidingPaneLayout的侧滑发生冲突,查看 ...

  6. Gradle在Android中的简单使用

    Gradle在Android中简单的使用 还望支持个人博客站:http://www.enjoytoday.cn Android Studio 使用gradle进行工程构建,为了更好的了解整个andro ...

  7. Java中使用UDP实现简单的聊天功能

    通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: import java.io.IOException; import java.net.*; im ...

  8. Android中使用ShareSDK集成分享功能

    引言      现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了 ...

  9. android 中Log - 简单使用

    例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 ...

随机推荐

  1. Linux init 0-6 启动级别

    原文地址:http://blog.sina.com.cn/s/blog_5f8e8d9801010wlr.html 原文地址:[转]Linux init 0-6 启动级别作者:流水清风 init 0- ...

  2. 添加类似navigationController自带的返回按钮

    添加类似navigationController自带的返回按钮,效果如下: 一.UINavigationcontroller自带的navigationBar 是无法添加左箭头的返回按钮的 在网上搜索了 ...

  3. dev的documentManager,多个tab窗体

    private void AddDocument(Funcation CurrentModel) { if (!string.IsNullOrWhiteSpace(CurrentModel.Funct ...

  4. [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...

  5. Linux学习4-阿里云服务器(CentOS)下使用 Tomcat安装 Jenkins

    前言 通常做自动化测试,需要用到jenkins来做持续集成,那么linux系统里面如何使用tomcat安装Jenkins环境呢? 前面一篇已经搭建好java和tomcat环境,接着直接下载jenkin ...

  6. rtsp实现的开源代码

    * live.com   C/S   C++   http://www.live555.com * darwin     S     C++   http://www.opensource.apple ...

  7. 替换NSUserDefaults的方案

    替换NSUserDefaults的方案 效果 源码 https://github.com/YouXianMing/iOS-Utilities // // BaseValueStorageManager ...

  8. SpringBoot下的Job定时任务

    编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务使用的非常方便,下面总结一下如何使用: 一,@schedul ...

  9. 开源项目DataTimePicker实现时间和日期的选择

       这个开源项目是模仿Google官方的time选择器做的,是否漂亮.让我爱不释手,真心喜欢.很有幸和大家一起分享下,那么话不多说开始讲解. 开源项目地址:https://github.com/fl ...

  10. executing external native build for cmake

    进一步调试的方法: 在Android studio下方打开terminal,然后: gradlew build --stacktrace