android用listview创建一个显示左右头像的聊天对话框
以下是创建一个显示左右头像的聊天对话框的步骤:
1.在布局文件中添加一个ListView:
<ListView
android:id="@+id/chat_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
android:padding="10dp"
android:clipToPadding="false"
/>
2.创建一个自定义的Adapter类ChatListAdapter,继承自BaseAdapter,并实现getView方法:
public class ChatListAdapter extends BaseAdapter {
private Context mContext;
private List<ChatMessage> mChatMessageList;
private LayoutInflater mInflater;
public ChatListAdapter(Context context, List<ChatMessage> chatMessageList) {
mContext = context;
mChatMessageList = chatMessageList;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mChatMessageList.size();
}
@Override
public Object getItem(int position) {
return mChatMessageList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_chat_message, parent, false);
viewHolder = new ViewHolder();
viewHolder.leftAvatarImageView = convertView.findViewById(R.id.left_avatar_imageview);
viewHolder.rightAvatarImageView = convertView.findViewById(R.id.right_avatar_imageview);
viewHolder.messageTextView = convertView.findViewById(R.id.message_textview);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
ChatMessage chatMessage = mChatMessageList.get(position);
if (chatMessage.isSentByMe()) {
viewHolder.leftAvatarImageView.setVisibility(View.GONE);
viewHolder.rightAvatarImageView.setVisibility(View.VISIBLE);
viewHolder.messageTextView.setBackgroundResource(R.drawable.bg_chat_message_right);
viewHolder.messageTextView.setText(chatMessage.getMessage());
} else {
viewHolder.leftAvatarImageView.setVisibility(View.VISIBLE);
viewHolder.rightAvatarImageView.setVisibility(View.GONE);
viewHolder.messageTextView.setBackgroundResource(R.drawable.bg_chat_message_left);
viewHolder.messageTextView.setText(chatMessage.getMessage());
}
return convertView;
}
private static class ViewHolder {
ImageView leftAvatarImageView;
ImageView rightAvatarImageView;
TextView messageTextView;
}
}
3.创建一个类ChatMessage来表示聊天消息:
public class ChatMessage {
private boolean mSentByMe;
private String mMessage;
public ChatMessage(boolean sentByMe, String message) {
mSentByMe = sentByMe;
mMessage = message;
}
public boolean isSentByMe() {
return mSentByMe;
}
public String getMessage() {
return mMessage;
}
}
4.创建一个布局文件item_chat_message.xml,用于显示一条聊天消息:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<ImageView
android:id="@+id/left_avatar_imageview"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/avatar_left"
android:visibility="gone"/>
<TextView
android:id="@+id/message_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="10dp"
android:textColor="@android:color/white"
android:maxWidth="280dp"
android:background="@drawable/bg_chat_message_right"/>
<ImageView
android:id="@+id/right_avatar_imageview"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/avatar_right"
android:visibility="gone"/>
</LinearLayout>
5.在Activity中使用ChatListAdapter和ListView来显示聊天对话框:
public class ChatActivity extends AppCompatActivity {
private ListView mChatListView;
private ChatListAdapter mChatListAdapter;
private List<ChatMessage> mChatMessageList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mChatListView = findViewById(R.id.chat_listview);
mChatListAdapter = new ChatListAdapter(this, mChatMessageList);
mChatListView.setAdapter(mChatListAdapter);
addChatMessage(new ChatMessage(false, "Hi, how are you?"));
addChatMessage(new ChatMessage(true, "I'm good, thanks!"));
addChatMessage(new ChatMessage(false, "What have you been up to?"));
addChatMessage(new ChatMessage(true, "Not much, just working on some projects."));
}
private void addChatMessage(ChatMessage chatMessage) {
mChatMessageList.add(chatMessage);
mChatListAdapter.notifyDataSetChanged();
mChatListView.smoothScrollToPosition(mChatMessageList.size() - 1);
}
}
``
原文地址: http://www.cveoy.top/t/topic/c2zS 著作权归作者所有。请勿转载和采集!