match_parent宽度在RecyclerView中不起作用
我的RecyclerView和项目具有match_parent宽度,但结果是:
<view class="android.support.v7.widget.RecyclerView" android:layout_width="match_parent"
和项目:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:id="@+id/ll_itm" android:orientation="horizontal" android:layout_width="match_parent"
充分:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:id="@+id/ll_itm" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="100" android:gravity="right" > <Button android:layout_width="0dp" android:layout_weight="15" android:layout_height="fill_parent" android:text="ملاحظات" android:id="@+id/button" /> <LinearLayout android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="20" android:gravity="center" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="#ff56ff83" fab:fab_colorNormal="@color/d_red" fab:fab_colorPressed="#ff5c86ff" fab:fab_size="mini" fab:fab_icon="@drawable/ic_remove_white" android:id="@+id/fab_rmv" /> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="25" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="0" android:gravity="right|center_vertical" android:id="@+id/txt_takhir_itm" /> <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="@color/colorprimarylight" fab:fab_colorNormal="@color/colorprimarydark" fab:fab_colorPressed="@color/colorprimary" fab:fab_size="mini" fab:fab_icon="@drawable/ic_add_white" android:id="@+id/fab_add" /> </LinearLayout> </LinearLayout> <Spinner android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" android:id="@+id/sp_nomre_itm" android:entries="@array/degrees"/> <LinearLayout android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" android:gravity="center" > <!--LinearLayout baraye ine ke nameshod fab ro weight behosh dad--> <com.getbase.floatingactionbutton.FloatingActionButton android:layout_width="fill_parent" android:layout_height="fill_parent" fab:fab_plusIconColor="#ff56ff83" fab:fab_colorNormal="@color/d_green" fab:fab_colorPressed="@color/d_orange" fab:fab_size="normal" fab:fab_icon="@drawable/ic_done_white" android:id="@+id/fab_hazr" /> </LinearLayout> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="5" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="100" android:gravity="right|center_vertical" android:id="@+id/txt_ghybtNumber_itm" /> <esfandune.ir.elmikarbordiardakan.other.CustomTxtView android:layout_weight="30" android:layout_width="0dp" android:layout_height="fill_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="عباسعلی ملاحسینی اردکانی" android:gravity="right|center_vertical" android:id="@+id/txt_title_itm" android:layout_marginRight="10dp" /> <view android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="10" class="de.hdodenhof.circleimageview.CircleImageView" android:id="@+id/view" android:src="@drawable/mmrdf" /> </LinearLayout>
在你的适配器中,你在膨胀onCreateViewHolder
的项目,是inflate
调用null
的第二个参数?
如果是这样,请将其更改parent
,这是onCreateViewHolder
函数签名中的第一个参数。
View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, parent, false);
如果你需要第二个参数为null
那么当你得到膨胀的视图引用时,请执行以下操作
View rootView = LayoutInflater.from(context).inflate(R.layout.itemLayout, null, false); RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); rootView.setLayoutParams(lp); return new RecyclerViewHolder(rootView);
里面onCreateViewHolder(…)适配器的方法,你膨胀视图..你必须定义ViewGroup为父。这将从第一个参数的onCreateViewHolder(…)方法。
看到我传递ViewGroup的第二个参数中的下面一行。 这将自动匹配视图到其父:
rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
///完整的代码如下
public View onCreateViewHolder(ViewGroup parent, int position) { // TODO Auto-generated method stub View rowView; LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView=inflater.inflate(R.layout.home_custom_list, parent,false);
当您在适配器中为您的项目设置布局参数时,请尝试此操作。
View viewHolder= LayoutInflater.from(parent.getContext()) .inflate(R.layout.item, parent, false); viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); ViewOffersHolder viewOffersHolder = new ViewOffersHolder(viewHolder); return viewOffersHolder;
我解决了这个问题:
myInflatedRowLayout.getLayoutParams().width = vg.getWidth();
它正在用MATCH_PARENT
的实际宽度replaceMATCH_PARENT
。
无法看到完整的代码,但可以猜测,LinearLayout中的一些视图是“ wrap_content
”。 您需要通过使用' android:layout_weight="1"
'使其中一个或一些扩展到全宽
更新:你有很多冗余layout_weight
的。 将它们全部设置为' wrap_content
',并且只为其中的一个添加layout_weight=1
– 用于最后一个CustomTextView。 这样,它将占据所有的空白空间。
我正在使用与MATCH_PARENT
的FrameLayout
宽度,并看到与RecyclerView
+ LinearLayoutManager
相同的行为。 上述变化都没有为我工作,直到我在onCreateViewHolder
callback中执行以下操作:
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.note_layout, parent, false); v.setLayoutParams(new RecyclerView.LayoutParams( ((RecyclerView) parent).getLayoutManager().getWidth(), context.getResources() .getDimensionPixelSize(R.dimen.note_item_height))); return new ViewHolder(v); }
显然看起来像(我猜)RecyclerView实现中的一个错误。