Android泡泡聊天界面的实现


昨天写了个界面,实现了Android泡泡聊天界面。运行结果如下,点击发送按钮,屏幕就显示Text的内容。


我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点:

(1)主界面其实就是一个List View 

       (2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西。背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常差。

        (3)自定义了一个adapter,当然是继承android.widget.BaseAdapter,重写了getView的方法。

整个工程分布如下:


主activity: ChatActivity如下:

package com.tencent;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;import java.util.ArrayList;
import java.util.Calendar;public class ChatActivity extends Activity {private static final String TAG = ChatActivity.class.getSimpleName();;private ListView talkView;private Button messageButton;private EditText messageText;// private ChatMsgViewAdapter myAdapter;private ArrayList<ChatMsgEntity> list = new ArrayList<ChatMsgEntity>();public void onCreate(Bundle savedInstanceState) {Log.v(TAG, "onCreate >>>>>>");super.onCreate(savedInstanceState);setContentView(R.layout.main);talkView = (ListView) findViewById(R.id.list);messageButton = (Button) findViewById(R.id.MessageButton);messageText = (EditText) findViewById(R.id.MessageText);OnClickListener messageButtonListener = new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubLog.v(TAG, "onclick >>>>>>>>");String name = getName();String date = getDate();String msgText = getText();int RId = R.layout.list_say_he_item;ChatMsgEntity newMessage = new ChatMsgEntity(name, date, msgText, RId);list.add(newMessage);// list.add(d0);talkView.setAdapter(new ChatMsgViewAdapter(ChatActivity.this, list));messageText.setText("");// myAdapter.notifyDataSetChanged();}};messageButton.setOnClickListener(messageButtonListener);}// shuold be redefine in the futureprivate String getName() {return getResources().getString(R.string.myDisplayName);}// shuold be redefine in the futureprivate String getDate() {Calendar c = Calendar.getInstance();String date = String.valueOf(c.get(Calendar.YEAR)) + "-"+ String.valueOf(c.get(Calendar.MONTH)) + "-" + c.get(c.get(Calendar.DAY_OF_MONTH));return date;}// shuold be redefine in the futureprivate String getText() {return messageText.getText().toString();}public void onDestroy() {Log.v(TAG, "onDestroy>>>>>>");// list = null;super.onDestroy();}
}

显示消息体的定义

package com.tencent;public class ChatMsgEntity {private static final String TAG = ChatMsgEntity.class.getSimpleName();private String name;private String date;private String text;private int layoutID;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getText() {return text;}public void setText(String text) {this.text = text;}public int getLayoutID() {return layoutID;}public void setLayoutID(int layoutID) {this.layoutID = layoutID;}public ChatMsgEntity() {}public ChatMsgEntity(String name, String date, String text, int layoutID) {super();this.name = name;this.date = date;this.text = text;this.layoutID = layoutID;}}

ChatMsgViewAdapter定义如下:

package com.tencent;import android.content.Context;
import android.database.DataSetObserver;import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.ArrayList;public class ChatMsgViewAdapter extends BaseAdapter {private static final String TAG = ChatMsgViewAdapter.class.getSimpleName();private ArrayList<ChatMsgEntity> coll;private Context ctx;public ChatMsgViewAdapter(Context context, ArrayList<ChatMsgEntity> coll) {ctx = context;this.coll = coll;}public boolean areAllItemsEnabled() {return false;}public boolean isEnabled(int arg0) {return false;}public int getCount() {return coll.size();}public Object getItem(int position) {return coll.get(position);}public long getItemId(int position) {return position;}public int getItemViewType(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {Log.v(TAG, "getView>>>>>>>");ChatMsgEntity entity = coll.get(position);int itemLayout = entity.getLayoutID();LinearLayout layout = new LinearLayout(ctx);LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);vi.inflate(itemLayout, layout, true);TextView tvName = (TextView) layout.findViewById(R.id.messagedetail_row_name);tvName.setText(entity.getName());TextView tvDate = (TextView) layout.findViewById(R.id.messagedetail_row_date);tvDate.setText(entity.getDate());TextView tvText = (TextView) layout.findViewById(R.id.messagedetail_row_text);tvText.setText(entity.getText());return layout;}public int getViewTypeCount() {return coll.size();}public boolean hasStableIds() {return false;}public boolean isEmpty() {return false;}public void registerDataSetObserver(DataSetObserver observer) {}public void unregisterDataSetObserver(DataSetObserver observer) {}
}

布局文件看得我比较痛苦,这个布局文件不好搞啊,呵呵

整个工程资源文件,我已经上传到资源共享里面了。

请大家这里下载:

http://download.csdn.net/user/randyjiawenjie



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

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

相关文章

【开源免费】使用Spring Boot和Html实现ChatGPT,1:亿还原,将就看。

简介 关注我&#xff1a;GPT4.0 JAVA SDK近期更新 前段时间写了一个Chatgpt的Java版SDK开源地址&#xff1a;chatgpt-java欢迎使用。但由于原来OpenAI 并没有支持官网的chatgpt模型&#xff0c;所以使用起来相对没有官网那么智能完善&#xff0c;所以就没有写出一个demo项目&a…

Fdog系列(五):使用Qt模仿QQ实现登录界面到主界面,功能篇。

文章目录 一. 前言同时完整项目代码已上传github&#xff1a;[Fdog即时通讯软件](https://github.com/HuaGouFdog/FdogInstantMessaging) 求星星&#xff01;二. 正文1. 如何保存第一次登录数据2. 如何获取已经登录过的账号信息,并完成自定义下列框3. 从下拉列表框删除账号4. 文…

可换皮肤的Qt登录界面

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ 可换皮肤的Qt登录界面 QSS的学习笔记 快…

chatgpt赋能python:Python如何去除停用词

Python 如何去除停用词 介绍 在进行自然语言处理时&#xff0c;停用词是常见的障碍。停用词是指在文本中频繁出现但没有实际意义的词语。例如&#xff0c;“the”、“is”、“a” 等单词通常被认为是停用词&#xff0c;因为它们在具有意义的文本中出现得非常频繁&#xff0c;…

使用关联规则分析股票数据--数据来自tushare大数据社区

使用关联规则分析股票数据--数据来自tushare大数据社区 一、开发环境二、目标三、关联规则&#xff08;之前了解过直接跳到第四步&#xff09;1.关联规则的定义2.啤酒尿布的例子2.1 支持度2.2置信度2.3 提升度2.4 关联规则2.5 啤酒和尿布 四、股票关联规则分析1.使用的库2.获取…

Twitter部分源代码泄漏、疑遭离职员工报复:马斯克要求GitHub交出所有上传、下载人员名单...

点击“开发者技术前线”&#xff0c;选择“星标” 让一部分开发者看到未来 作者 &#xff5c; Tina 来自&#xff1a;AI前线 最近的法律文件显示&#xff0c;Twitter 的部分源代码已经在网上泄露。这是一次罕见的、严重的知识产权泄露事件。为防止该事件对其服务产生潜在的破坏…

马斯克刚说要开源,没几天Twitter源代码就泄漏了...

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) 根据《纽约时报》的报道&#xff0c;一份法律文件显示&#xff0c;Twitter 称其部分源代码在网上被泄露&#xff0c;该公司已于上周五采取行动&#xff0c;它通过向托管代码的 GitHub 发送版权侵权通知&#xff0c;删…

文心一言员工跳槽工资翻倍, AI 人才备受追捧;推特称其部分源代码遭泄露;Docker 撤回受争议的收费方案|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

有道智云翻译API + retrofit实现在线翻译Android app

目录 1.进入有道智云主页&#xff0c;注册自己的账号(手机号验证码)&#xff0c;完善信息随意填 2.登录进来后&#xff0c;创建应用。根据需要选择语言翻译服务。 3. 打开Android Studio&#xff0c;新建空的Activity项目 1. 新建项目&#xff0c;在build.gradle(app)添加re…

STRAIGHT声码器详解

转载请注明出处。 STRAIGHT自适应加权谱内插的语音转换与重构 STRAIGHT&#xff08; Speech Transformation and Representation using Adaptive Interpolation of weighted spectrum)算法&#xff08;Kawahara,1998&#xff09;&#xff0c;是一种语音信号分析、合成、修改的…

chatgpt赋能python:如何用Python挣钱:从小白到大佬的必备指南

如何用Python挣钱&#xff1a;从小白到大佬的必备指南 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python的应用范围非常广泛&#xff0c;它可以为各种行业带来巨大的价值。当然&#xff0c;对于许多人来说&#xff0c;如果你是一名SEO从业者&#xff0c;也完全可…

chatgpt赋能python:如何利用Python在网上赚钱:一份SEO指南

如何利用Python在网上赚钱&#xff1a;一份SEO指南 随着互联网的快速发展和Python成为一种越来越受欢迎的编程语言&#xff0c;越来越多的人开始利用Python在网上赚取额外的收入。本篇文章将介绍一些Python工具和技术&#xff0c;以及SEO最佳实践&#xff0c;帮助你利用Python…

PHP短信验证功能

PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号&#xff0c;在用户管理中心创建应用&#xff0c;确定AppKEY和App Secret还有配置签名 第二步 在应用管理中选择SDK下载&#xff0c;或者直接点击http://download.csdn.net/detail/s371795639/9695983下载&#xff0c;免费的…

发送短信验证码 API数据接口

1.前言 此接口发送短信验证码 短信模板 参数说明: 1449978 验证码为&#xff1a;{1}为您的登录验证码&#xff0c;请于{2}分钟内填写&#xff0c;如非本人操作&#xff0c;请忽略本短信。 1449979 验证码为&#xff1a;{1}&#xff0c;您正在登录&#xff0c;若非本人操作&…

为何语言学家乔姆斯基对ChatGPT持否定态度?

本文比较了乔姆斯基关于语言知识的本质、来源和使用的理论与 GPT 的不同&#xff0c; 说明了GPT没有可解释性。 2023年3月8日著名语言学家乔姆斯基与罗伯茨&#xff08;Ian Roberts&#xff09;、瓦图穆尔&#xff08;Jeffrey Watmull&#xff09;共同在《纽约时报》发表了题为…

如何更换您的Gmail地址

在许多情况下&#xff0c;您可能需要更改您的 Gmail 地址&#xff1a;您换了工作、结婚并改了名字&#xff0c;或者您在 2003 年设置的电子邮件地址突然看起来有点累了。无论出于何种原因&#xff0c;以下是更改 Gmail 地址并确保您在此过程中不会丢失任何重要数据的方法。 创…

将163邮箱改为使用outlook软件登录的切换步骤

效果图&#xff1a; 实际操作步骤如下&#xff1a; 1. 登录163.邮箱&#xff0c;如下是使用网页版登录&#xff1b;按照下面要求&#xff0c;扫描二维码 2. 找个txt文件&#xff0c;保存此 一次性密码&#xff0c;后面步骤有用。 3.检查当前状态&#xff1b; 两个都是“已开…

Becky!客户端Hotmail/outlook邮箱设置方法

Becky!邮箱客户端是一款非常简洁好用的邮件接收发送软件。最近本软件菜单增加了对中的支持&#xff0c;感谢作者的不懈努力。 日语版本下载地址&#xff1a; http://www.rimarts.co.jp/becky-j.htm 中文菜单版本&#xff1a; http://www.zhcn.org/wp-content/plugins/download…

Gmail,qq,hotmail,163,sina等邮箱的Smtp设置

Gmail SMTP 服务器&#xff1a;smtp.gmail.com&#xff0c; SSL&#xff1a;是&#xff0c;服务器端口&#xff1a;587&#xff0c;见下图&#xff1a; Hotmail SMTP 服务器&#xff1a;smtp.live.com&#xff0c; SSL&#xff1a;是&#xff0c;服务器端口&#xff1a;587&…

凭实力破圈的狄耐克,究竟藏了多少惊喜?

你是否曾经想象这样一个场景&#xff1a; 进入社区时&#xff0c;自动识别业主身份&#xff0c;精准放行并联动家中智能场景模式。人未到&#xff0c;智先行&#xff0c;提前营造极度舒适便捷的人居环境。 进入单元楼时&#xff0c;联动电梯等候&#xff0c;无需触碰按键&…