服务器之家

服务器之家 > 正文

Android编程实现泡泡聊天界面实例详解(附源码)

时间:2021-04-15 15:19     来源/作者:randyjiawenjie

本文实例讲述了android编程实现泡泡聊天界面的方法。分享给大家供大家参考,具体如下:

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

Android编程实现泡泡聊天界面实例详解(附源码)

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

(1)主界面其实就是一个list view

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

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

整个工程分布如下:

Android编程实现泡泡聊天界面实例详解(附源码)

主activity: chatactivity如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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() {
      @override
      public void onclick(view arg0) {
        // todo auto-generated method stub
        log.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 future
  private string getname() {
    return getresources().getstring(r.string.mydisplayname);
  }
  // shuold be redefine in the future
  private 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 future
  private string gettext() {
    return messagetext.gettext().tostring();
  }
  public void ondestroy() {
    log.v(tag, "ondestroy>>>>>>");
    // list = null;
    super.ondestroy();
  }
}

显示消息体的定义

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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定义如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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) {
  }
}

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

完整实例代码代码点击此处本站下载

希望本文所述对大家android程序设计有所帮助。

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部