【Android|第67篇 Android Studio实现聊天记录界面-ListView多形式界面】
第67篇 Android Studio实现聊天记录界面-ListView多形式界面
- 1.需求
- 2.文件目录
- 3.主界面布局
- 4.左边信息界面布局
- 5.右边信息界面布局
- 6.数据类Data
- 7.MyAdapter类
- 8.主活动类
- 9.效果
- 10.代码
-
- 10.1.主界面
- 10.2.左边布局
- 10.3.右边布局
- 10.4.Data类
- 10.5.MyAdapter类
- 10.6.活动类
1.需求
文章图片
这是QQ的聊天界面
这呢其实用ListView多形式界面就可以实现,可以看出:
一个是图片在左边,文字在右边,
而另一个是图片在右边,文字在左边,
而且文字和图片是紧挨着的
如此我们只需改变图片和文本的位置即可。
先看看文件目录:
2.文件目录
文章图片
实现ListView那基本就需要数据类和适配器类,再加一个活动类就可以了,复杂的工程就得往里面加很多东西。
然后添加两张图片,即两个头像
再者是三个布局:
主布局只有一个ListView
左信息界面是一个图形一个文本
右信息界面也是一个图形一个文本
ok,下面逐一说明:
其实适配器昨天已经说过了,下面只说改变的地方。
3.主界面布局
文章图片
还是昨天的代码,一点没变,你可以按照自己的需要修改。
4.左边信息界面布局
文章图片
就做了点点修改。
5.右边信息界面布局
文章图片
把左边布局的控件位置变换,然后让文本内容靠右显示。
6.数据类Data
文章图片
剩下的是get和set函数,一键生成即可
7.MyAdapter类
文章图片
其他的都是昨天的代码,一点没变,这里我们先判断当前行的类型,看是左边还是右边,是右边就给右边界面的布局,是左边就给左边的布局。
8.主活动类
文章图片
在数据初始化的时候每隔一个显示不同类型。
9.效果
文章图片
还可以吧,如果你先显示图片啊,视频啊什么的,都可以自己修改布局和实现代码,都ok拉。
10.代码 10.1.主界面
10.2.左边布局
10.3.右边布局
10.4.Data类
package com.example.listviewadapter;
public class Data {
private int imageId;
private String text;
private int type;
public Data() {
}public Data(int imageId, String text, int type) {
this.imageId = imageId;
this.text = text;
this.type = type;
}public int getImageId() {
return imageId;
}public void setImageId(int imageId) {
this.imageId = imageId;
}public String getText() {
return text;
}public void setText(String text) {
this.text = text;
}public int getType() {
return type;
}public void setType(int type) {
this.type = type;
}
}
10.5.MyAdapter类
package com.example.listviewadapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.LinkedList;
public class MyAdapter extends BaseAdapter {private Context mContext;
private LinkedList myData;
public MyAdapter() {}public MyAdapter(LinkedList myData, Context mContext) {
this.myData = https://www.it610.com/article/myData;
this.mContext = mContext;
}@Override
public int getCount() {
return myData.size();
}@Override
public Object getItem(int position) {
return myData.get(position);
}@Override
public long getItemId(int position) {
return position;
}@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
TextView textView;
if(myData.get(position).getType() == 0){
convertView = LayoutInflater.from(mContext).
inflate(R.layout.left_information_layout,parent,false);
imageView = convertView.findViewById(R.id.image_left);
textView = convertView.findViewById(R.id.txt_left);
}
else {
convertView = LayoutInflater.from(mContext).
inflate(R.layout.right_information_layout,parent,false);
imageView = convertView.findViewById(R.id.image_right);
textView = convertView.findViewById(R.id.txt_right);
}
imageView.setImageResource(myData.get(position).getImageId());
textView.setText(myData.get(position).getText());
return convertView;
}}
10.6.活动类
package com.example.listviewadapter;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.LinkedList;
public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinkedList myData = https://www.it610.com/article/new LinkedList<>();
for(int i = 0;
i < 50;
i++){
if(i % 2 == 0){
myData.add(new Data(R.drawable.left_image,"在吗",0));
}
else{
myData.add(new Data(R.drawable.right_image,"在",1));
}
}ListView listView = findViewById(R.id.listView_information);
listView.setAdapter(new MyAdapter(myData,this));
}
}
完结
推荐阅读
- android|android studio 布局嵌套,Android Studio实战 - 设计布局之嵌套布局
- Android-基础|Android基础教程之-----布局
- 【华为游戏多媒体】调用获取Token接口得到的Token值是null
- 移动开发|校友在美团 Android 岗的四面分享~
- android|记录JAVA中Calendar类的一个问题
- android逆向|第一次进行android逆向的过程记录
- Flutter项目开发|Flutter小技巧总结之SingleChildScrollView里面嵌套Column和ListView时候,ListView不显示
- Android开发|Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
- c++|【C++篇】STL常见容器String的模拟实现