android中實現簡單的聊天功能
阿新 • • 發佈:2019-01-11
這個例子只是簡單的實現了單機版的聊天功能,自己跟自己聊,啦啦~~
主要還是展示RecyclerView控制元件的使用吧~
參考我之前寫的文章:
1、先新增一個關於聊天內容的Chat.java類:
package com.example.chenrui.common; public class Chat { private String targetUser; private String content;public Chat(String targetUser, String content) { this.targetUser = targetUser; this.content = content; } public String getTargetUser() { return targetUser; } public void setTargetUser(String targetUser) { this.targetUser = targetUser; }public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
Chat.java這個類有兩個屬性:聊天物件和聊天內容
2、新增一個RecyclerView控制元件子項chat_item.xml,這個是實現了聊天內容項的展示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/chatText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/chat" android:gravity="center_vertical" android:text="TextView" /> </LinearLayout>
3、新增RecyclerView控制元件的介面卡ChatAdapter.java類:
package com.example.chenrui.app1; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.example.chenrui.common.Chat; import java.util.List; public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> { private List<Chat> chatList; public ChatAdapter(List<Chat> chatList) { this.chatList = chatList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_item,viewGroup,false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { Chat chat = chatList.get(i); viewHolder.chatText.setText(chat.getContent()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(viewHolder.chatText.getLayoutParams()); if(chat.getTargetUser().equals("張三")) { params.gravity = Gravity.LEFT; } else { params.gravity = Gravity.RIGHT; } viewHolder.chatText.setLayoutParams(params); } @Override public int getItemCount() { return chatList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { TextView chatText; public ViewHolder(@NonNull View itemView) { super(itemView); chatText = itemView.findViewById(R.id.chatText); } } }
上面的程式碼,設定的是,如果聊天物件是張三,就把聊天內容顯示在列表的左側,否則就顯示在列表的右側。這個是模擬自己和別人對話的展示效果
4、最後就是主Activity了
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/chatList" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toTopOf="@+id/linearLayout3" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:id="@+id/linearLayout3" android:layout_width="match_parent" android:layout_height="50dp" android:background="@android:color/darker_gray" android:orientation="horizontal" app:layout_constraintBottom_toTopOf="@+id/linearLayout4"> <Spinner android:id="@+id/targetUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <EditText android:id="@+id/chatContent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3" android:inputType="textPersonName" /> </LinearLayout> <LinearLayout android:id="@+id/linearLayout4" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent"> <Button android:id="@+id/chatSubmit" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="發言" /> </LinearLayout> </android.support.constraint.ConstraintLayout>
MainActivity.java
package com.example.chenrui.app1; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import com.example.chenrui.common.Chat; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final RecyclerView chatList = findViewById(R.id.chatList); final List<Chat> chatData = new ArrayList<Chat>(); final ChatAdapter chatAdapter = new ChatAdapter(chatData); chatList.setAdapter(chatAdapter); LinearLayoutManager layoutManager = new LinearLayoutManager(this); chatList.setLayoutManager(layoutManager); final Spinner targetUser = findViewById(R.id.targetUser); String[] data = {"張三","李四"}; ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.support_simple_spinner_dropdown_item,data); targetUser.setAdapter(adapter); final EditText chatContent = findViewById(R.id.chatContent); Button chatSubmit = findViewById(R.id.chatSubmit); chatSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!chatContent.getText().toString().equals("")) { String user = targetUser.getSelectedItem().toString(); chatData.add(new Chat(user, chatContent.getText().toString())); chatAdapter.notifyItemInserted(chatData.size() - 1); chatList.scrollToPosition(chatData.size() - 1); chatContent.setText(""); } } }); } }
顯示效果: