Anzahl der Spalten mit GridLayoutManager und RecyclerView ändern
In meinem fragment ich werde mein GridLayout in der folgenden Weise:
mRecycler.setLayoutManager(new GridLayoutManager(rootView.getContext(), 2));
So, ich will einfach nur, um das zu ändern 2
für eine 4
wenn der Benutzer dreht das Telefon/tablet. Ich habe gelesen, über onConfigurationChanged
und ich versuchte, damit es funktioniert für meinen Fall, aber es ist nicht in der richtigen Weise. Wenn ich wechsle mein Handy stürzt die app...
Könnten Sie mir sagen, wie man dieses Problem lösen?
Hier ist mein Ansatz, um die Lösung zu finden, die nicht richtig funktioniert:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = newConfig.orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 2));
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
mRecycler.setLayoutManager(new GridLayoutManager(mContext, 4));
}
}
Vielen Dank im Voraus!
InformationsquelleAutor der Frage fapps | 2015-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, die Behandlung dieses in Ihrem onCreateView-Methode statt, da es wird jedes mal aufgerufen, wenn es eine Orientierung ändern:
InformationsquelleAutor der Antwort SobaDeveloper
Wenn du mehr als ein Zustand oder den Wert verwenden, der an mehreren stellen dieser kann von der hand gehen ziemlich schnell. Ich schlage vor, erstellen Sie die folgende Struktur:
mit
res/values/dimens.xml
:sowie
res/values-land/dimens.xml
:Und der code wird (und für immer bleibt) wie folgt:
Können Sie leicht sehen, wie einfach es ist das hinzufügen von neuen Möglichkeiten der Bestimmung der Anzahl der Spalten, zum Beispiel unter Verwendung von
-w500dp
/-w600dp
/-w700dp
resource Ordner statt-land
.Ist es auch ganz einfach die Ordner in separaten Ressource-Ordner in den Fall, Sie don ' T wollen, um Durcheinander Ihre andere (relevantere) Ressourcen:
InformationsquelleAutor der Antwort TWiStErRob
Recycle-Ansicht unterstützt AutofitRecycleView.
Müssen Sie
android:numColumns="auto_fit"
in Ihrer xml-Datei.Finden Sie auf dieser AutofitRecycleViewLink
InformationsquelleAutor der Antwort kattashri
Einen robusteren Weg, um zu bestimmen, die keine. der Spalten wäre zu berechnen, basierend auf der Bildschirmbreite zur Laufzeit. Ich normalerweise verwenden Sie die folgende Funktion.
Es ist eine dynamische Methode zur genauen Berechnung der Nr. der Spalten. Dies wird anpassungsfähiger für die Benutzer von unterschiedlichen Bildschirm-Größen ohne resticted, um nur zwei mögliche Werte.
NB: Sie können variieren den Wert gehalten, indem die scalingFactor variable. Der kleiner es ist, desto mehr no. der Spalten, die Sie anzeigen können, und je größer der Wert der weniger keine. der Spalten berechnet werden. Es ist der scaling-Faktor zu optimieren, um Ihre Bedürfnisse.
InformationsquelleAutor der Antwort Rowland Mtetezi
In der onCreate () - Ereignis aus, das Sie verwenden können, StaggeredGridLayoutManager
Dann, wenn der Benutzer dreht die screen-capture-Ereignis, und ändern Sie die Anzahl der Spalten automatisch
InformationsquelleAutor der Antwort Vladimir Salguero
Landete ich im Umgang mit diesem in der onCreate-Methode.
Es funktionierte perfekt für meine app.
InformationsquelleAutor der Antwort user6731701
Implementieren Sie die Methode in Ihrem recyclerView onMeasure.
Erstellen Sie zunächst die java-Klasse AutofitRecyclerView
In Ihrer XML-layout-Datei activity_main.xml
Dann setzen Sie die variable auf die Breite von jedem Element in der Datei Größe der Werte-Ordner values/dimens.xml
Kann es für verschiedene Bildschirm-Auflösungen values-xxhdpi/dimens.xml
In der activity in der onCreate-Ereignis den folgenden code
InformationsquelleAutor der Antwort Vladimir Salguero