假设我在
RecyclerView
中有一个或两个项目。如何在中心中显示它们 RecyclerView的宽度和高度必须是match_parent
AFAIK recyclerView
从top
开始。我怎样才能将gravity = center
提供给single item
。我的意思是如果只有一个项目,它应该在屏幕的中心。
RecylerView 没有gravity attribute
。还有其他方法吗?
我无法将它的高度设置为wrap_content。因为我还要添加一个swipeRefreshLayout。
layout.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>
答案 0 :(得分:1)
如果您考虑在中心显示单个列表项,那么我建议将另一个布局设置为layout_height
并将layout_width
设置为match_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
的{{1}}设置为居中,并将RelativeLayout
的高度设置为RecyclerView
。
这是我的测试应用程序截图
答案 1 :(得分:0)
使用以下内容:
<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>
答案 2 :(得分:0)
您可以使用多个 viewType 设置适配器,并为单独的项目设置特殊类型,其中 layout_height="match_parent"。或者,在这种情况下,您可以通过调整其布局参数来自定义单个项目,但是您需要确保为其他项目(被回收的项目)重置它们。