以下是创建一个显示左右头像的聊天对话框的步骤:

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);
    }
}
``
android用listview创建一个显示左右头像的聊天对话框

原文地址: http://www.cveoy.top/t/topic/c2zS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录