android如何在RecyclerView中设置Gravity

时间:2016-11-08 22:02:45

标签: android android-recyclerview android-gravity

我正在尝试制作聊天应用,并且在RecyclerView中设置自定义视图的重力时遇到了麻烦。我一直在寻找并尝试了一整天,但我无法制作,它总是显示为this(ScreenShot)。它应该位于屏幕右侧而不是左侧。但是在Android Studio预览版中,它显示正确。我附加了我的来源..请告诉我出了什么问题..

  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. 2.在MessageItem.xml中(我设置了graivity Right,截图显示正确)

    <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 shows well(ScreenShot)

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

      ....
      holder.myNormarLayout.setVisibility(View.VISIBLE);
      holder.myNormarLayout.setGravity(Gravity.Right);
      ....
      
    3. 我从搜索过程中尝试了几乎所有的东西,但它们并没有为此工作.. 拜托......帮助我

1 个答案:

答案 0 :(得分:0)

您可以使用约束布局以获得更好的性能。

在您的情况下,可能在时间和文本之间添加加权视图可能有所帮助,请尝试此

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