2016-10-07 5 views
1

チャットボットを作成しようとしていますが、のアダプタにTextViewを置き換える方法はありません。あなたが見ることができるように、すべての応答が、現在先頭に並んでいるAndroidのTextViewの位置をRecyclerViewのアダプタからどのように置き換えるのですか?

enter image description here

、私はRecyclerViewのアダプタから他の側に一人から回答を移動したいと思います:下のスクリーンショットを参照してください。 。ここでは、アダプタのコードです:

CustomAdapter.class

<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" /> 

が、私は別の解決策を作った

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



} 

chat_message.xmlが、それは2 TextViewを維持することですsをchat_message.xmlに設定し、未使用の表示設定を変更するTextView。しかし、私が探しているのは、単一のTextViewでそれを行うことが可能かどうかということです。また、TextViewの背景は9-patch-imageであり、アダプタからバックグラウンドリソースとして割り当てられているため、TextViewを移動するとバックグラウンドが損なわれることはありません。どんな考えでも大歓迎です。 :)

+0

1のTextView ... *私はのTextViewを移動するときに、それはまた、背景を台無しべきではありません。 * ...ハァッ?? – Selvin

+0

Gravity.STARTとGravity.END(またはXMLのlayout_gravity)を使用して、重力をサポートするレイアウトでTextViewをラップすることができます –

答えて

1
@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()); 

    } 

の親のレイアウトの下で気泡(9パッチ)を子のレイアウトを作成し、TEXT(メッセージ)としてapprorpriately 重力を設定します。幅マッチ親、2セットアライン親右レイアウトパラメータの代わりにTEXT_ALIGNMENT_VIEW_ENDとRelativeLayoutで

+0

これで問題は解決しましたか? – DroidDev

0
<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> 

enter image description here

関連する問題