是否可以通过编程方式为Android中的RecyclerView子项设置重力?

时间:2015-06-28 15:37:37

标签: android android-recyclerview android-relativelayout

我正在尝试为RecyclerView中的子项设置重力,但看起来LayoutParams没有重力方法。我尝试过以下方法:

RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(
                RecyclerView.LayoutParams.WRAP_CONTENT, RecyclerView.LayoutParams.WRAP_CONTENT);

我也尝试了以下内容:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

在这两种情况下params.setMargin(int, int, int, int)都可以正常工作并且边距设置正确。

我的RecyclerView:

<android.support.v7.widget.RecyclerView
    android:id="@+id/messages_list_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar"
    android:layout_marginTop="20dp"/>

我的RelativeLayout(RecyclerView的孩子):

<RelativeLayout
android:id="@+id/message_text_wrapper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@drawable/chat_bubble"
android:layout_margin="16dp"
android:padding="10dp"
xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/message_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:textColor="@android:color/primary_text_light"
        android:textSize="18sp"
        />

</RelativeLayout>

我希望能够做的是params.setGravity(int)或任何其他使这成为可能的黑客攻击。感谢。

3 个答案:

答案 0 :(得分:0)

我会将RelativeLayoutFrameLayout一起包裹在android:width="match_parent"中,然后在FrameLayout上左/右设置重力。

答案 1 :(得分:0)

将项目视图包装在FrameLayout中,确保其layout_width设置为match_parent

将您在FrameLayout中包装的布局设为ID并将其连接到ViewHolder。 (我想你已经用@+id/message_text_wrapper

完成了这项工作

然后在onBindViewHolder中执行此操作:

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) holder.yourLayout.getLayoutParams()
if (condition) {
    params.gravity = Gravity.END // or Gravity.RIGHT
} else {
    params.gravity = Gravity.START // or Gravity.LEFT
}

答案 2 :(得分:0)

这对我在 onBindViewHolder 中使用 Java 有效,我在其中为 TextView 设置了属性

`mTextView.setGravity(Gravity.CENTER_HORIZONTAL);`

Android Studio 会通知您 Gravity.CENTER_HORIZONTAL = Int 1 的属性,因此您可以输入整数。

其他属性可以
Gravity.CENTER = 整数 17
Gravity.RIGHT = 整数 5
Gravity.LEFT = 整数 3
Gravity.TOP = 整数 48
Gravity.BOTTOM = 整数 80

等等