2015-07-14 1 views
10

Ich bin fest mit einem Problem über die Änderung Recycler Höhe auf der Grundlage seiner gesamten Elemente. Was ich versucht habe, ist Layout-Param wie folgt zu verwenden:Android - Wie RecyclerView Höhe dynamisch ändern?

 ViewGroup.LayoutParams params = myRecyclerView.getLayoutParams(); 
     params.height = itemHeight * numberOfItem; 
     myRecyclerView.requestLayout(); 

oder

 ViewGroup.LayoutParams params = new RecyclerView.LayoutParams(..WRAP_CONTENT, ...WRAP_CONTENT);; 
     params.height = itemHeight * numberOfItem; 
     myRecyclerView..setLayoutParams(params); 

Aber es hat nicht funktioniert. Wie kann ich es tun? Bitte hilf mir !

+0

yep, ich habe vergessen, das zu bemerken. Der Grund ist, ich möchte Multi-Recyclerview zur Zeit in einem scroolview verwenden. Und, wenn ich die Höhe eines Recyclerview zu wrapcontent einstellen wird es den ganzen Raum dauern, aber es funktioniert, wenn ich eine feste Höhe wie 100dp für ex festlege. Also, ich finde den Weg, um die Höhe der Recyclerview Dinamically zu ändern. –

+0

in der Tat, meine App haben ein Formular, das Benutzer Eingabedaten erlauben und er kann neue Form so viel wie er will hinzufügen, indem Sie einen "+" Knopf drücken. Also, ich versuche den Weg, dass, wenn er den "+" Knopf drückt, ich einen Gegenstand zur Recycleransicht hinzufüge, also kann ich alles über Recyclerview steuern. Um Zeit zu sparen, wähle ich einen anderen Weg, um es zu tun, aber ich möchte immer noch wissen, wie es auf diese Weise geht. Und vielleicht gibt es viele Leute, die das auch wissen wollen. –

+0

https://viksaaskool.wordpress.com/2015/05/08/adjust-recyclerview-item-height-example/ –

Antwort

4

Ich habe das versucht. Es funktionierte. Kann Hilfe sein.

+0

werfen Sie einen Blick auf Ihren Code, es scheint, Sie haben versucht, die Höhe jedes Artikels in Recycler-Ansicht zu ändern. Aber ich möchte stattdessen die Höhe der Recyclerview ändern. –

+0

Sie schreiben params.height = itemHeight * numberOfItem; Wenn Sie die Anzahl der Elemente kennen, können Sie die Höhe des Recycleviewers festlegen. Aber Sie wollen wahrscheinlich eine feste Höhe des Artikels eine Höhe von recycleviewer. – eurosecom

7

Sie sollten LayoutParams der Elternansicht in setLayoutParams (params) verwenden.

Zum Beispiel:

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

ändern LayoutParams im Code.

RelativeLayout.LayoutParams lp = 
      new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 500); 
recyclerView.setLayoutParams(lp); 
+2

Ich habe gerade Linearlayout in Relative geändert, dann hat es automatisch residiert. –

-2

Dieser Code funktioniert Ich bin sicher es

ViewGroup.LayoutParams params=recyclerview.getLayoutParams(); 
params.height=100; 
recyclerview.setLayoutParams(params); 

Das andere, was Sie tun können, ist eine lineare Layout wie die Eltern des Recyclers Ansicht machen und dann die Höhe steigen dynamisch für die übergeordnete Ansicht

Betrachten Sie das folgende XML unter

<LinearLayout 
     andorid:id=""@+id/yourLayoutId""> 

    <RecyclerView/> 

</LinearLayout 

die fol Betrachten Brüllen Code

LinearLayout layout = (LinearLayout)findViewById(R.id.yourLayoutId); 
LinearLayout.LayoutParams lp = (LayoutParams) layout.getLayoutParams(); 
lp.height = 100; 
0

Wenn Sie nur Größe möchten Ihre Recycler Ansicht automatisch nach Anzahl der Elemente dann, warum Sie RecyclerView Höhe nicht als wrap_content setzen.

Wenn Sie mehrere ScrollView im Layout haben, dann verpacken Sie RecyclerView in NestScrollView und stellen Sie seine Höhe als wrap_content ein.

Code:

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

Obwohl die Frage vor geraumer Zeit gefragt wurde, dachte ich, einige könnten diese Antwort hilfreich.

Ich habe einen RecyclerView mit Adapter.Die Höhe wird in onBindViewHolder Methode des Adapters eingestellt:

Layout:

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

Adapter:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

public abstract static class ViewHolder extends RecyclerView.ViewHolder { 
    public ViewHolder(View itemView) { 
     super(itemView); 
    } 
    public abstract void setFixedHeight(); 
} 

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); 

    return new ViewHolder(view) { 

     @Override 
     public void setFixedHeight() { 
      // magic happening here 
      ViewGroup.LayoutParams parentParams = parent.getLayoutParams(); 
      parentParams.height = 
       ((RecyclerView) parent).computeVerticalScrollRange() 
        + parent.getPaddingTop() 
        + parent.getPaddingBottom(); 
      parent.setLayoutParams(parentParams); 
     } 
    }; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.setFixedHeight(); 
    } 

// other methods here 
} 

Einstellung Adapter:

recyclerView.setAdapter(new MyAdapter(...));

Hinweis: Verwenden ((RecyclerView) parent).computeHorizontalScrollRange() mit horizontaler scroll