android中实现简单的聊天功能

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

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

参考我之前写的文章:

android中RecyclerView控件的使用

android中使用Nine-Patch图片

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("");
                }
            }
        });
    }
}

显示效果:

原文地址:https://www.cnblogs.com/modou/p/10253774.html

时间: 2025-01-10 02:12:16

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

简单的聊天功能

简单的聊天功能 可以查看附近的人,简单的本地聊天,简单的客户资料. 下载地址:http://www.devstore.cn/code/info/792.html 运行截图:  

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

好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪自己太年轻了,还好是给指定行业的人使用. 重新学习思考之后,再看自己在项目中的某些实现的代码,的确不尽人意,甚至想骂自己. 项目经常改,改来该去,代码一直增加,一个fragment也没什么功能,接近1000行的代码,用region括起来,开看起来还挺整齐的,找的时候就凉了.究其原因,没有一种模式,所

EventBus在Android中的简单使用

EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功能时.遇到了点击事件的冲突问题及数据传递更新问题. 详细点就是在能够上下拉刷新的ListView的Header上有GridView.此时,GridView的OnitemClick事件与ListView的OnItemClick事件冲突. 并且我在实现 Griview的点击事件时,还要进行数据传递. 解

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

通过DatagramSocket类来实现.此类表示用来发送和接收数据报包的套接字. 发送端代码如下: 2 3 import java.io.IOException; 4 import java.net.*; 5 import java.util.Scanner; 6 7 public class Send implements Runnable{ 8 @Override 9 public void run() { 10 //创建一个发送消息的套接字 11 DatagramSocket sendS

Android开发之简单的聊天室(客户端与服务器进行通信)

1.使用ServerSocket创建TCP服务器端 Java中能接收其他通信实体连接请求的类是ServerSocket, ServerSocket对象用于监听来 自客户端的Socket连接,如果没有连接,它将一直处于等待状态.ServerSocket包含一个监听来自客户端连接请求的方法. 1) Socket accept():如果接收到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket;否则该方法将一直处于等待状态,线程也被阻塞. 创建ServerSoc

适配器模式 在Android中的简单理解

Android 在Android上提到适配器模式就会想到最常用的ListView和BaseAdapter 在这个功能的使用中,类似于适配器模式的对象适配器 例如在ListView中想用一个getView()方法,但是不同的数据,不同的需求,会有不同的getView()结果,所以getView()不能写死了,那么可能就想到了用适配器模式 所以ListView里面包含了一个ListAdapter的成员变量,实际上是ListView继承了AbsListView,ListAdapter变量是在AbsLi

Android中Xfermode简单用法

首先在写这篇博客的时候,需要说明我是参考了那篇博文给我的灵感: 详解Paint的setXfermode(Xfermode xfermode) 其次呢,在写这篇博文的时候呢也避免不了抱怨啊.网上其他的关于Xfermode介绍的大部分都是google官方文档中属性的含义,都很雷同估计都是翻译过来的 我想说的是就不能有点原创吗? so,我决定写这篇文章: 一是抒发我心中的纠结: 二是抒发这么多天下文章一大抄就是没有自己出的文章: 三是抄就抄吧,也要加入自己的感悟把: 四是记录一下,以免以后忘记: 另外

(六)Android中使用CountDownTimer实现倒计时功能

一.倒计时运行效果图 开发中经常遇到获取短信验证码后需要等待1分钟倒计时,这时需要一个倒计时程序.本文利用CountDownTimer封装了一个比较好用的倒计时工具类,方便以后程序开发.下面是倒计时功能的运行效果图: 二.此工程结构如下所示: 三.此工程中各个重点文件的代码如下所示: 3.1 TimeCount.java是实现倒计时的工具类,此工具类可以在很多倒计时场合使用,此类中的代码如下所示: package com.example.timecountdemo; import android

android 中Log - 简单使用

例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 LogCat,通过'Add a new logcat filter'创建一个过滤器,filter-name为任意,'by log tag'的值与在java代码中的Log.d(String tag, String message)的参数中的tag一致.运行即可看到message信息.