match_parent चौड़ाई RecyclerView में काम नहीं करती है


135

मेरे RecyclerView और आइटम का मिलान चौड़ाई है लेकिन परिणाम है: यहाँ छवि विवरण दर्ज करें

    <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>

जवाबों:


434

अपने एडेप्टर में जहां आप आइटम को बढ़ा रहे हैं 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);

1
मेरे लिए काम नहीं करता है: अगर मैंने अपना रूटव्यू आइटम की चौड़ाई = "match_parent" पर सेट किया है, लेकिन अगर मैं इसे उदाहरण के लिए 500dp पर सेट करता हूं तो यह "काम करता है"। कोई उपाय ? ठीक है, यह LinearLayout के साथ काम नहीं करता है, लेकिन आइटम पर एक रिश्तेदार के साथ काम करता है ... wtf?
कोकरिको

5
Sry, जैसा कि यह रिश्तेदार के साथ काम करता है, मैं सिर्फ LinearLayout को RelativeLayout में बदलता हूं। लेकिन RecyclerView मैच_परेंट था, और आइटम rootView (इसलिए लिनियरलैटआउट) मैच_परेंट भी था और यह काम नहीं करता था। पहली बार मैंने इसका सामना किया।
Cocorico

1
ओह महान, यह काम करता है..एक घंटे के लिए मेरे बाल खींचने के बाद।
ज़ी काई

4
हाँ जैसा कि पहले किसी कारण से उल्लेख किया गया था कि यह LinearLayout के साथ काम नहीं करता था और इसे इस फिक्स के साथ RelativeLayout पर स्विच करने के लिए लगता था कि यह चाल है।
निक पेपर्स

11
यह Linearlayout या Constrainlayout के साथ काम नहीं करता है। मुझे Relativelayout पर जाना था और फिर इसने काम किया
ymerdrengene

18

OnCreateViewHolder (...) विधि के अंदर अडैप्टर की विधि जहां आप दृश्य को फुला रहे हैं .. आपको पेरेंट के रूप में ViewGroup को परिभाषित करना होगा। यह आपको onCreateViewHolder (...) विधि के 1 पैरामीटर से मिलेगा।

नीचे दिए गए लाइन को दूसरे पैरामीटर में देखें मैं व्यूग्रुप से गुजर रहा हूं। यह स्वचालित रूप से अपने माता-पिता के लिए दृश्य से मेल खाएगा:

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);

8

मैं एक उपयोग कर रहा था FrameLayoutके साथ MATCH_PARENTचौड़ाई के लिए और एक साथ एक ही व्यवहार देख रहा था RecyclerView+ LinearLayoutManager। उपरोक्त बदलावों में से किसी ने भी मेरे लिए तब तक काम नहीं किया जब तक कि मैंने onCreateViewHolderकॉलबैक में निम्नलिखित नहीं किया :

@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 कार्यान्वयन में (मैं अनुमान लगा रहा हूं) एक बग जैसा दिखता है।


लेआउट को ओवरराइड करना एकमात्र समाधान था जिसने मेरी मदद की। किसी को पता है कि अगर यह RecyclerView में एक बग है? Google बग ट्रैकर के लिंक के लिए आभारी होंगे।
सोशियल

5

जब आप एडॉप्टर में अपने आइटम के लिए लेआउट परमेस सेट करते हैं तो यह कोशिश करें।

 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;

5

मैंने इस तरह तय किया था। गतिविधि लेआउट फ़ाइल के साथ मेरे मामले में समस्या है क्योंकि मैं रूट गतिविधि लेआउट के रूप में कांस्ट्रेन्डलैट का उपयोग कर रहा हूं। आपके लिए भी मामला हो।

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolBar"
        layout="@layout/toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/accent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolBar" />
</android.support.constraint.ConstraintLayout>

2
यह विश्वास करना मुश्किल है, लेकिन मेरे आसपास के
कॉन्सट्रैटलटायट को एक लिनियरलाईट के

Const_intLayout के प्रत्यक्ष बच्चों के लिए match_parent का उपयोग नहीं किया जाना चाहिए। इसके बजाय, बाधा / राइट / बॉटम / टॉप विशेषताओं के साथ 0dp का उपयोग करें।
डोरुआ एड्रियन

3

मेरे मामले में, समस्या RecyclerViewXML घोषणा में layout_widthथी, 0dp था जिसका अर्थ है match_constraints, जब मैंने इसे बदल दिया match_parent, तो आइटमों ने सभी RecyclerViewचौड़ाई भरना शुरू कर दिया :

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="0dp"  <-- changed this to "match_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="45dp"
            android:background="@android:color/transparent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHeight_default="wrap"
            app:layout_constraintHeight_max="360dp"
            app:layout_constraintHeight_min="60dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/header"/>

2

मैंने इसे हल किया:

 myInflatedRowLayout.getLayoutParams().width = vg.getWidth();

यह MATCH_PARENTवास्तविक चौड़ाई के साथ बदल रहा है RecyclerView


1

इसने मेरे लिए काम किया।

इसे बदलें

   View view = View.inflate(parent.getContext(), R.layout.row_timeline, null);
   return new TimeLineViewHolder(view, viewType);

इसके द्वारा

 View rootView = LayoutInflater.from(context).inflate(R.layout.row_timeline, null, false);
        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        rootView.setLayoutParams(lp);
        return new TimeLineViewHolder(rootView, viewType);

0

अपना पूरा कोड नहीं देख सकते हैं, लेकिन अनुमान लगा सकते हैं, कि आपके लिनियरलाईट के अंदर के कुछ दृश्य ' wrap_content' हैं। आपको उनमें से एक या कुछ का विस्तार करके पूरी चौड़ाई तक विस्तार करना होगा 'android:layout_weight="1" '

अद्यतन: आपके पास अतिरेक है layout_weight। उन सभी को बनाएं ' wrap_content' और उनमें से केवल एक के लिए layout_weight=1- अंतिम CustomTextView के लिए जोड़ें । इस तरह, यह सभी रिक्त स्थान पर कब्जा कर लेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.