Android仿写微信聊天界面,用代码实现
时间: 2023-11-15 07:23:42 浏览: 55
好的,我可以帮你讲一下实现思路和代码。首先,我们需要用到RecyclerView来展示聊天内容,同时使用EditText和Button来实现用户输入和发送消息。接下来,我们分为两个部分实现:消息列表的展示和消息的发送。
1. 消息列表的展示
首先,我们需要创建一个聊天消息实体类,包括消息内容、发送者等信息。然后,我们创建一个RecyclerView来展示消息列表。Adapter中的ViewHolder分为两种:发送者和接收者,根据发送者是否为当前用户来判断。具体代码如下:
```java
public class ChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_SEND = 0;
private static final int TYPE_RECEIVE = 1;
private Context mContext;
private List<ChatMessage> mMessageList;
public ChatAdapter(Context context, List<ChatMessage> messageList) {
mContext = context;
mMessageList = messageList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_SEND) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_chat_send, parent, false);
return new SendViewHolder(view);
} else {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_chat_receive, parent, false);
return new ReceiveViewHolder(view);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ChatMessage chatMessage = mMessageList.get(position);
if (holder instanceof SendViewHolder) {
((SendViewHolder) holder).tvContent.setText(chatMessage.getContent());
} else if (holder instanceof ReceiveViewHolder) {
((ReceiveViewHolder) holder).tvContent.setText(chatMessage.getContent());
}
}
@Override
public int getItemCount() {
return mMessageList.size();
}
@Override
public int getItemViewType(int position) {
ChatMessage chatMessage = mMessageList.get(position);
if (chatMessage.getSender() == ChatMessage.SenderType.SEND) {
return TYPE_SEND;
} else {
return TYPE_RECEIVE;
}
}
private static class SendViewHolder extends RecyclerView.ViewHolder {
private TextView tvContent;
public SendViewHolder(View itemView) {
super(itemView);
tvContent = itemView.findViewById(R.id.tv_content);
}
}
private static class ReceiveViewHolder extends RecyclerView.ViewHolder {
private TextView tvContent;
public ReceiveViewHolder(View itemView) {
super(itemView);
tvContent = itemView.findViewById(R.id.tv_content);
}
}
}
```
其中,item_chat_send.xml和item_chat_receive.xml是发送者和接收者的布局文件,可以根据需求自行定义。
2. 消息的发送
接下来,我们实现消息的发送功能。我们可以在EditText中监听用户输入,当用户点击发送按钮时,将消息添加到RecyclerView中并清空EditText的内容。具体代码如下:
```java
public class ChatActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private EditText mEtInput;
private Button mBtnSend;
private ChatAdapter mAdapter;
private List<ChatMessage> mMessageList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
initView();
initListener();
}
private void initView() {
mRecyclerView = findViewById(R.id.recycler_view);
mEtInput = findViewById(R.id.et_input);
mBtnSend = findViewById(R.id.btn_send);
mMessageList = new ArrayList<>();
mAdapter = new ChatAdapter(this, mMessageList);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter);
}
private void initListener() {
mBtnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String content = mEtInput.getText().toString().trim();
if (!TextUtils.isEmpty(content)) {
ChatMessage message = new ChatMessage(content, ChatMessage.SenderType.SEND);
mMessageList.add(message);
mAdapter.notifyItemInserted(mMessageList.size() - 1);
mRecyclerView.scrollToPosition(mMessageList.size() - 1);
mEtInput.setText("");
}
}
});
}
}
```
以上就是实现Android仿写微信聊天界面的代码实现。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)