0

チャットアプリを作ろうとしているのですが、RecyclerView でカスタムビューのグラビティを設定するのに苦労しています。私は一日中検索して試してみましたが、作ることができませんでした。常にこのように表示されます(スクリーンショット)。画面の左ではなく右に配置する必要があります。しかし、Android Studio Preview では、正しく表示されます。ソースを添付しています。何が問題なのか教えてください。

  1. MainActivity.xml (RecyclerView) 内

    ......
    <RelativeLayout
        android:background="#9cbad8"
        android:layout_weight="70"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:layout_alignParentRight="true"
        android:paddingBottom="5dp"
        android:listSelector="@drawable/bg_transparent"
        android:cacheColorHint="@android:color/transparent"
        android:paddingTop="50dp"
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    </RelativeLayout>
    .......
    

2.MessageItem.xml で (重力を右に設定すると、スクリーンショットが正しく表示されます)

<LinearLayout
        android:id="@+id/my_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
            <LinearLayout
                android:id="@+id/my_normal_layout"
                android:orientation="horizontal"
                android:gravity="end"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                    <TextView
                        android:id="@+id/my_time"
                        android:textSize="10sp"
                        android:layout_marginRight="5dp"
                        android:layout_gravity="bottom"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="오후 15:15"/>

                    <TextView
                        android:textAlignment="center"
                        android:layout_marginTop="5dp"
                        android:layout_marginRight="5dp"
                        android:maxWidth="200dp"
                        android:textSize="14sp"
                        android:lineSpacingMultiplier="1.2"
                        android:gravity="center_vertical"
                        android:paddingLeft="10dp"
                        android:paddingRight="15dp"
                        android:paddingTop="8dp"
                        android:paddingBottom="8dp"
                        android:background="@drawable/bubble_my"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textColor="#000000"
                        android:text="this is Test"
                        android:id="@+id/my_normal_text" />
            </LinearLayout>
</LinearLayout>

Android Layout Preview はよく表示されます (スクリーンショット)

  1. 私の RecyclerViewHolder

    public class ViewHolder extends RecyclerView.ViewHolder {
        LinearLayout myLayout;
        LinearLayout myNormarLayout;
        LinearLayout myMoreLayout;
    
        public ViewHolder(View v) {
            super(v);
            myLayout = (LinearLayout)v.findViewById(R.id.my_layout);
            myNormarLayout = (LinearLayout)v.findViewById(R.id.my_normal_layout);
            myMoreLayout = (LinearLayout)v.findViewById(R.id.my_more_layout);
        }
    }
    
  2. また、RecyclerViewAdapter で、Gravity Again を変更しました。

    ....
    holder.myNormarLayout.setVisibility(View.VISIBLE);
    holder.myNormarLayout.setGravity(Gravity.Right);
    ....
    

検索からほとんどのことを試しましたが、これにはうまくいきませんでした..お願いします...助けてください

4

1 に答える 1

0

Constraint Layout を使用すると、パフォーマンスが向上します。

あなたの場合、時間とテキストの間に加重ビューを追加すると役立つかもしれません。これを試してください

<LinearLayout
    android:id="@+id/my_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
        <LinearLayout
            android:id="@+id/my_normal_layout"
            android:orientation="horizontal"
            android:gravity="end"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/my_time"
                    android:textSize="10sp"
                    android:layout_marginRight="5dp"
                    android:layout_gravity="bottom"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="오후 15:15"/>
                <View
                      android:layout_height="0dp"
                      android:layout_width="0dp"
                      android:layout_weight="0"
                      />
                <TextView
                    android:textAlignment="center"
                    android:layout_marginTop="5dp"
                    android:layout_marginRight="5dp"
                    android:maxWidth="200dp"
                    android:textSize="14sp"
                    android:lineSpacingMultiplier="1.2"
                    android:gravity="center_vertical"
                    android:paddingLeft="10dp"
                    android:paddingRight="15dp"
                    android:paddingTop="8dp"
                    android:paddingBottom="8dp"
                    android:background="@drawable/bubble_my"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#000000"
                    android:text="this is Test"
                    android:id="@+id/my_normal_text" />
        </LinearLayout>

于 2016-11-08T22:10:50.220 に答える