Android 에 서 는 RecylerView 를 사용 하여 채 팅 창 효 과 를 구현 합 니 다.
10516 단어 androidrecylerview채 팅 창
효과 도 는 다음 과 같다.(그 중에서 채 팅 상자 배경 도 는 9-patch 그림 으로 내용 적응 조절 이 가능 하 다.AndroidStudio 자체 기능 으로 만 들 면 됩 니 다.그림->우 클릭->create 9-patch file.
그 중에서 주의해 야 할 것 은:
1.9-patch 그림 을 drawable 디 렉 터 리 에 저장 해 야 사용 할 수 있 습 니 다.
2.배경 그림 을 작 게 크기 조정 하면 자동 으로 늘 어 납 니 다.)
1、activity_main.xml 코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.RecyclerView
android:id="@+id/Main_rView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="50dp"></android.support.v7.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:padding="5dp"
android:orientation="horizontal">
<EditText
android:id="@+id/Main_etContent"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:minLines="1"
android:maxLines="3"
android:hint=" "
android:textSize="14dp"/>
<Button
android:id="@+id/Main_btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dp"
android:text="Send"
android:textAllCaps="false"/>
</LinearLayout>
</RelativeLayout>
2、layout_item_content.xml 코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/Layout_Item_Content_lLayoutReceive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_alignParentLeft="true"
android:background="@drawable/bg_chat2"
android:orientation="vertical">
<TextView
android:id="@+id/Layout_Item_Content_tvContentReceive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text=" "
android:textSize="14dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/Layout_Item_Content_lLayoutSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_alignParentRight="true"
android:background="@drawable/bg_chat1"
android:orientation="vertical">
<TextView
android:id="@+id/Layout_Item_Content_tvContentSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "
android:textSize="14dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
/>
</LinearLayout>
</RelativeLayout>
3.RecyclerViewAdapter.java 의 코드 는 다음 과 같 습 니 다.
package com.deepreality.recyclerviewdemo;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private Context mContext;
private List<Tb_ChatContent> tbChatContentList;
private Tb_ChatContent tb_chatContent;
static class ViewHolder extends RecyclerView.ViewHolder {
private LinearLayout lLayoutReceive, lLayoutSend;
private TextView tvReceive, tvSend;
public ViewHolder(View itemView) {
super(itemView);
lLayoutReceive = itemView.findViewById(R.id.Layout_Item_Content_lLayoutReceive);
lLayoutSend = itemView.findViewById(R.id.Layout_Item_Content_lLayoutSend);
tvReceive = itemView.findViewById(R.id.Layout_Item_Content_tvContentReceive);
tvSend = itemView.findViewById(R.id.Layout_Item_Content_tvContentSend);
}
}
public RecyclerViewAdapter(Context mContext, List<Tb_ChatContent> tbChatContentList) {
this.mContext = mContext;
this.tbChatContentList = tbChatContentList;
}
@NonNull
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.layout_item_content, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, int position) {
tb_chatContent = tbChatContentList.get(position);
if (tb_chatContent.getType() == 0) {
holder.lLayoutReceive.setVisibility(View.VISIBLE);
holder.lLayoutSend.setVisibility(View.GONE);
holder.tvReceive.setText(tb_chatContent.getContent());
} else {
holder.lLayoutReceive.setVisibility(View.GONE);
holder.lLayoutSend.setVisibility(View.VISIBLE);
holder.tvSend.setText(tb_chatContent.getContent());
}
}
@Override
public int getItemCount() {
return tbChatContentList.size();
}
}
4.MainActivity.java 의 코드 는 다음 과 같 습 니 다.
package com.deepreality.recyclerviewdemo;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Context mContext;
private RecyclerView rViewChat;
private EditText etContent;
private Button btnSend;
private List<Tb_ChatContent> tbChatContentList;
private Tb_ChatContent tb_chatContent;
private RecyclerViewAdapter recyclerViewAdapter;
private String[] arrayContents = new String[]{"How are you", "Fine,Thank you.", "How are you"
, "Fine,Thank you.", "How are you", "Fine,Thank you."};
private int[] arrayTypes = new int[] {0, 1, 0, 1, 0, 1};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
baseDataInit();
bindViews();
viewsAddListener();
viewsDataInit();
}
private void baseDataInit() {
mContext = this;
tbChatContentList = new ArrayList<>();
}
private void bindViews() {
rViewChat = findViewById(R.id.Main_rView);
etContent = findViewById(R.id.Main_etContent);
btnSend = findViewById(R.id.Main_btnSend);
}
private void viewsAddListener() {
btnSend.setOnClickListener(this);
}
private void viewsDataInit() {
rViewSetAdapter();
}
private void rViewSetAdapter() {
for (int i = 0; i < arrayContents.length; i++) {
tb_chatContent = new Tb_ChatContent(arrayContents[i], arrayTypes[i]);
tbChatContentList.add(tb_chatContent);
}
// RecylerView ( , , )
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
rViewChat.setLayoutManager(linearLayoutManager);
//
recyclerViewAdapter = new RecyclerViewAdapter(mContext, tbChatContentList);
rViewChat.setAdapter(recyclerViewAdapter);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Main_btnSend: {
tb_chatContent = new Tb_ChatContent(etContent.getText().toString(), Tb_ChatContent.TYPE_SEND);
tbChatContentList.add(tb_chatContent);
//
recyclerViewAdapter.notifyDataSetChanged();
//
rViewChat.smoothScrollToPosition(tbChatContentList.size() - 1);
break;
}
default:break;
}
}
}
총결산위 에서 말 한 것 은 편집장 이 소개 한 안 드 로 이 드 에서 RecylerView 를 사용 하여 채 팅 창 효 과 를 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.