国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中使用RecylerView實現聊天框效果

2019-10-21 21:40:36
字體:
來源:轉載
供稿:網友

從Android 5.0開始,谷歌公司推出了一個用于大量數據展示的新控件RecylerView,可以用來代替傳統的ListView,更加強大和靈活。在上篇文章給大家介紹了Android RecylerView入門教程,大家可以點擊查看詳情。

效果圖如下:(其中,聊天框背景圖用9-patch圖,可以內容自適應調節。利用AndroidStudio自帶的功能制作就行了,圖片->右鍵->create 9-patch file。

其中要注意的是:

1、將9-patch圖保存到drawable目錄下才管用。

2、要將背景圖片處理一下,縮放到足夠小,它會自動伸縮。)

Android,RecylerView,聊天框

Android,RecylerView,聊天框

 

Android,RecylerView,聊天框

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;    }  }}

總結

以上所述是小編給大家介紹的Android中使用RecylerView實現聊天框效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 当雄县| 拜城县| 阿克陶县| 定西市| 永济市| 涞源县| 陇西县| 乌海市| 苏州市| 重庆市| 开阳县| 天祝| 青州市| 同德县| 米脂县| 安康市| 庆云县| 贵州省| 台州市| 芜湖县| 桃园市| 武宣县| 卫辉市| 宁夏| 淳化县| 电白县| 稷山县| 巴彦县| 宜州市| 黎平县| 巨鹿县| 开封市| 宿松县| 库尔勒市| 中西区| 全州县| 休宁县| 津市市| 天津市| 古田县| 习水县|