2

假设我有一个或两个项目RecyclerView。我怎么能在中心显示它们 RecyclerView 必须有宽度和高度是 match_parent

AFAIK recyclerViewtop. 我怎么能给gravity = centersingle item。我的意思是,如果只有 1 个项目出现,它应该位于屏幕中央。 RecylerView没有gravity attribute. 有没有其他办法。

我无法将其高度设置为 wrap_content。因为我还得加一个swipeRefreshLayout。

布局.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/MatchMatch"
    android:background="@color/theme_color_gift_finder">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/activity_main_swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rv_gift_menu"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="@dimen/margin_pad_10" />

        </android.support.v4.widget.SwipeRefreshLayout>

        <LinearLayout
            android:id="@+id/ll_bottom"
            style="@style/LinearHorizontal"
            android:layout_marginBottom="@dimen/margin_pad_16"
            android:background="@android:color/transparent"
            android:gravity="center">

            <com.netsolace.efc.utility.customviews.widgets.CustomButton
                android:id="@+id/btn_go"
                android:layout_width="@dimen/circular_go_n_done_btn_size"
                android:layout_height="@dimen/circular_go_n_done_btn_size"
                android:background="@drawable/oval_generic"
                android:text="@string/go"
                android:textColor="@color/theme_color_gift_finder"
                android:textSize="@dimen/text_size_medium" />

        </LinearLayout>

    </LinearLayout>

    <com.netsolace.efc.utility.customviews.widgets.CustomTextView
        android:id="@+id/tv_gift_no_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="No Results"
        android:textColor="@android:color/white"
        android:textSize="@dimen/text_size_large"
        android:textStyle="bold"
        android:visibility="gone" />

</FrameLayout>
4

3 回答 3

2

如果您考虑在中心显示单个列表项,那么我建议您获取另一个布局,其中layout_height设置layout_widthmatch_parent,然后在您的列表仅包含一个项目时设置列表项。

所以在你onCreateViewHolder的适配器里面,做这样的事情

// Declare a constant named SINGLE_VIEW first, inside your Adapter
private final int SINGLE_VIEW = 1;

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v;

    if (viewType == SINGLE_VIEW) {
        v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_single, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;

    } else {
        v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;

    }
}

然后在getItemViewType你需要return正确的看法。

@Override
public int getItemViewType(int position) {
    if(position == 0 && yourList.size() == 1) return SINGLE_VIEW;
    else return super.getItemViewType(position);
}

更新

如果你需要把你RecyclerView放在屏幕的中央,那么你需要像这样设计你的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:gravity="center">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

从上面的代码中获取的重要内容是将gravity父级的设置RelativeLayout为 center 并将高度设置RecyclerViewwrap_content

这是我的测试应用程序截图

这是我的测试应用程序截图

于 2016-06-15T09:33:09.627 回答
0

您可以使用多个视图类型设置适配器,并为单独的项目设置一个特殊类型,其中它的 layout_height="match_parent"。或者,您可以在这种情况下通过调整其布局参数来自定义单个项目,但是您需要确保为其他项目(被回收的)重置它们。

于 2021-02-18T10:58:44.103 回答
-1

使用以下:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

  <android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" /> 
</LinearLayout>
于 2020-02-13T13:13:52.153 回答