RecyclerView-Elementbreite layout_width="match_parent" stimmt nicht mit dem übergeordneten Element überein

7

Ich benutze RecyclerView und ich versuche, das Breitenelement von RecyclerView match_parent zu machen, da ich

verwende
  

LinearLayoutManager.HORIZONTAL

%Vor%

benutzerdefinierte_layout.xml

%Vor%

LayoutManager

%Vor%

ViewHolder

%Vor%     
Diyaa 25.08.2015, 07:21
quelle

3 Antworten

13

Ich habe das Problem behoben:

1- Holen Sie sich die Bildschirmgröße (Breite).

2- Die ViewHolder-Breite entspricht der Bildschirmgröße.

Unter meinem Code, wenn jemand es braucht.

%Vor%     
Diyaa 26.08.2015, 06:37
quelle
6

Hinweis: Siehe Update am Ende dieses Posts.

Alte Antwort:

Folgendes funktionierte für mich:

%Vor%

, direkt nach dem Aufblasen der Ansicht "view".

Es nimmt im Grunde die Breite des übergeordneten Elements und ersetzt die Layoutbreite der neuen Ansicht durch die Breite der übergeordneten Ansicht.

Sie können auch eine Überprüfung für MATCH_PARENT hinzufügen, um sicherzustellen, dass sie korrekt angezeigt wird, falls Sie die XML-Datei später in einer anderen Breite ändern. Also so:

%Vor%

Es wird nur die übergeordnete Breite machen, wenn vorher die Breite MATCH_PARENT war.

BEARBEITEN:

Seien Sie vorsichtig bei der übermäßigen Verwendung dieses Fixes, da eine Variation davon einen Layout-Fehler verursacht hat. Ich habe das getan:

%Vor%

Das hat funktioniert, aber es hat die Breite und Höhe nicht aktualisiert, wenn die Größe der RecyclerView geändert wurde. Daher kann eine von zwei Korrekturen für dieses Update angewendet werden:

  1. Suchen Sie nach der RecyclerView-Adapterausrichtung, und führen Sie diese parent.getHeight () usw. nur für die Dimensionen durch, in denen das Scrollen erlaubt ist.
  2. Oder, irgendwo im ViewHolder, speichern Sie die ursprüngliche 'Breite' und 'Höhe' und wiederholen Sie diesen Schritt jedes Mal in der onBindViewHolder () Methode.

Das folgende Update scheint zu funktionieren:

%Vor%

Hinweis: Wenn Sie diese Methode der Größenanpassung innerhalb der onBindViewHolder () -Methode verwenden, müssen Sie auch getAdapter () .notifyDataSetChanged () innerhalb der Activity.onSizeChanged () !

Kurz gesagt, die Hauptidee ist: Prüfe auf MATCH_PARENT für jede Bindung , nicht nur auf den Create View Holder. Auf diese Weise funktioniert die Größenanpassung der RecyclerView auch.

UPDATE: Ab RecyclerView v7: 23.2.1 scheint es, als hätten sie es behoben, so dass diese benutzerdefinierten Fixes jetzt nicht mehr notwendig sind. RecyclerView selbst sollte jetzt sowohl WRAP_CONTENT als auch MATCH_PARENT Einstellungen erkennen.

    
RhetoricalRuvim 17.01.2016 06:25
quelle
3

Entfernen Sie dies im Layout.

%Vor%

Und legen Sie noch einmal die Layoutparameter für das Element im Adapter fest.

%Vor%     
Anitha Manikandan 25.08.2015 07:26
quelle