簡體   English   中英

如何從 RecyclerView 的適配器替換 Android 中 TextView 的位置?

[英]How to alternate the position of TextView in Android from adapter of RecyclerView?

嘗試構建聊天機器人,但如何在RecyclerView的適配器中交替使用TextView 請看下面的截圖:

在此處輸入圖片說明

如您所見,當前所有響應都與開頭對齊,我想將RecyclerView的適配器從一個人的回復移到另一側。 這是適配器的代碼:

自定義適配器.class

    public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.FeedsViewHolder>
{



    DataHolder d1 = new DataHolder();

    public  class FeedsViewHolder extends RecyclerView.ViewHolder
    {
        private TextView chat;
        private Typeface face;

        FeedsViewHolder(View itemView)
        {
            super(itemView);

            chat = (TextView)itemView.findViewById(R.id.chatMessage);
            face = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/Roboto-Regular.ttf");
            chat.setTypeface(face);


        }



    }

    private static class DataHolder
    {
        List<Text> feeds;

    }



    CustomAdapter(List<Text> feeds)
    {
        this.d1.feeds = feeds;
    }



    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }


    @Override
    public FeedsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.chat_message, viewGroup, false);
        FeedsViewHolder pvh = new FeedsViewHolder(v);
        return pvh;
    }



    @Override
    public void onBindViewHolder(FeedsViewHolder feedViewHolder, int i)
    {
        if(d1.feeds.get(i).isMachineOrHuman())
        {
            feedViewHolder.chat.setBackgroundResource(R.drawable.user);
            feedViewHolder.chat.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
        }

        else
            feedViewHolder.chat.setBackgroundResource(R.drawable.ais);


        feedViewHolder.chat.setText(d1.feeds.get(i).getMessage());

    }

    @Override
    public int getItemCount()
    {

        if(d1.feeds!=null)
        {
            return d1.feeds.size();
        }
        else
        {
            return 0;
        }
    }



}

聊天消息.xml

<TextView android:id="@+id/chatMessage"
android:layout_width="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android" />

現在,我做了一個替代解決方案,即在chat_message.xml保留兩個TextView並更改未使用的TextView的可見性設置。 但我正在尋找的是是否可以使用單個TextView來做到這一點。 此外, TextView的背景是​​一個9-patch-image ,它被分配為適配器的背景資源,所以當我移動TextView它不應該也破壞背景。 任何想法將不勝感激。 :)

  @Override
    public void onBindViewHolder(FeedsViewHolder feedViewHolder, int i)
    {
        if(d1.feeds.get(i).isMachineOrHuman())
        {
            feedViewHolder.chat.setBackgroundResource(R.drawable.user);
            **feedViewHolder.chat.setGravity(Gravity.RIGHT);** // *Sent Message*
            feedViewHolder.chat.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
        }

        else {
            feedViewHolder.chat.setBackgroundResource(R.drawable.ais);
          **feedViewHolder.chat.setGravity(Gravity.LEFT);** // *Receive Message*
            feedViewHolder.chat.setText(d1.feeds.get(i).getMessage());

    }

The bubble(9-patch)的父布局下創建一個子布局,並將Gravity適當地設置為 TEXT(Message)。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
    android:id="@+id/message_box"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:background="@drawable/message_bubble"
    android:longClickable="true"
    android:minHeight="40dp">

    <TextView
        android:id="@+id/message_body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Put your message"
        android:textColor="@color/black"
        android:textColorLink="@color/black"
        android:textSize="?attr/TextSizeBody"
        android:visibility="visible" />
</LinearLayout>

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM