我有一个包含RecyclerView的片段,其中layout_width =" match_parent":
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity$PlaceholderFragment" />
RecyclerView中的项目也是CardView,还有layout_width =&#34; match_parent&#34;:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"
card_view:cardCornerRadius="4dp">
<TextView
android:layout_gravity="center"
android:id="@+id/info_text"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
android:textAppearance="?android:textAppearanceLarge"/>
</android.support.v7.widget.CardView>
我将项目视图扩充如下:
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
CardView v = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_listitem, null, true);
ViewHolder vh = new ViewHolder(v);
return vh;
}
但是当我运行应用程序时,CardView呈现为wrap_content,如下所示:
请注意,这是在模拟器上运行,而不是在真实设备上运行。
我做错了什么,还是个错误?
答案 0 :(得分:275)
inflate
的文档:
从指定的xml资源中膨胀新的视图层次结构。抛出 如果出现错误,则显示InflateException。
参数
资源要加载的XML布局资源的ID(例如, R.layout.main_page)root
查看成为。的父级 生成的层次结构(如果attachToRoot为true),或者只是一个 为root提供一组LayoutParams值的对象 返回层次结构(如果attachToRoot为false。)
attachToRoot 是否 膨胀的层次结构应该附加到根参数?如果 false,root只用于创建正确的子类 XML中根视图的LayoutParams。返回的根视图 膨胀的等级。如果提供了root并且attachToRoot为true, 这是根;否则它是膨胀的XML文件的根。
这里重要的是不供应为真,但做供应父母:
LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_listitem, parent, false);
提供parent
视图可让inflater了解要使用的layoutparams。提供false
参数告诉它不将它附加到父级。这就是RecyclerView
将为您做的事情。
答案 1 :(得分:54)
使用RelativeLayout作为CardView的直接父级。
<RelativeLayout
android:layout_width="match_parent" ... >
<CardView
android:layout_width="match_parent" ... >
</CardView>
</RelativeLayout>
答案 2 :(得分:11)
这对我有用,
View viewHolder= LayoutInflater.from(parent.getContext())
.inflate(R.layout.item, null, false);
viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
return new ViewOffersHolder(viewHolder);
答案 3 :(得分:6)
我这样做的方式是:
View view = mInflater.inflate(R.layout.row_cardview, null, true);
WindowManager windowManager = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
int width = windowManager.getDefaultDisplay().getWidth();
view.setLayoutParams(new RecyclerView.LayoutParams(width, RecyclerView.LayoutParams.MATCH_PARENT));
<强>说明:强> 在获得卡片视图后,在onCreateViewHolde中,获取屏幕宽度,然后相应地设置布局参数以进行卡片视图。
答案 4 :(得分:5)
这似乎已在'com.android.support:recyclerview-v7:23.2.1'
请参阅:RecyclerView wrap_content进一步讨论。
答案 5 :(得分:4)
只需设置新的布局参数
view.setLayoutParams(new RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT,
RecyclerView.LayoutParams.WRAP_CONTENT
));
答案 6 :(得分:3)
默认实施强制在默认布局管理器中使用 wrap_content :
@Override
public LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
您需要做的就是在LayoutManager中覆盖此方法,如下所示:
@Override
public LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
答案 7 :(得分:2)
这对我有用
View view = inflator.inflate(R.layout.layout_item, ***null***, false);
答案 8 :(得分:1)
使用card_view:带负值的contentPadding
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
card_view:contentPadding="-4dp"
card_view:cardElevation="0dp"
android:layout_height="wrap_content">
它对我有用
答案 9 :(得分:-1)
在宽度为CardView
match_parent