2017-02-16 2 views
1

Die Liegerad-Bibliothek von Android bietet einige standardmäßige Möglichkeiten zum Anpassen eines RowFragments, sowohl die Zeilen als auch die Karten selbst, aber ich bin mir nicht sicher, wie benutzerdefinierte Elemente außerhalb der im Framework bereitgestellten Elemente hinzugefügt werden.Wie leanback's ListRows anpassen?

Was ich speziell erreichen möchte, ist ein FooterItem zu einer Zeile hinzuzufügen, ähnlich wie eine jede Zeile ein HeaderItem hat.

Ich möchte die vorhandene Funktionalität in ListRowView/ListRowPresenter erhalten, aber ich bin mir nicht sicher, wie man es "richtig" macht.

Antwort

1

Wie bei fast allen Dingen mit Leanback gibt es mehr als eine Möglichkeit, die Katze zu häuten.

Wir mussten die ListRow anpassen, um mehr Füllung auf die Kopfzeile hinzuzufügen. Wir haben dieses Maß an Anpassung erreicht durch onBindRowViewHolder von ListRowPresenter überschreiben, die View für den Header Grabbing (via View header = holder.getHeaderViewHolder().view;). Und dann änderten wir die Höhe mit header.getLayoutParams().height = rowItem.getRowHeaderHeight();.

Mit dieser Technik können Sie Ihre Fußzeilenansicht dynamisch zu holder.view (mit addView) hinzufügen.

Ein anderer Ansatz wäre das, was die Dokumentation für RowPresenter empfiehlt. Das entsprechende Zitat ist:

Wenn eine Unterklasse von RowPresenter UI-Widgets fügt hinzu, es sollte RowPresenter.ViewHolder Unterklasse und überschreiben createRowViewHolder (Viewgroup) und initializeRowViewHolder (ViewHolder). Die Unterklasse muss die Layout-ID "row_content" für das Widget verwenden, das an den Titel eines HeadersFragments angeglichen wird, das im übergeordneten Fragment vorhanden sein kann.

Also mit diesem neuen empfohlenen Ansatz, werden Sie im Grunde liefern Ihre eigenen XML. Ich glaube, Sie können sogar Unterklasse ListRowPresenter. Um zu sehen, wie der Code funktioniert, schauen Sie sich ListRowView an, um zu sehen, dass er das xml für R.layout.lb_list_row aufbläht. Und dann verwendet es nur die Ansicht für R.id.row_content.

Dann wird das die tatsächliche Ansicht sein, die von holder.view geliefert wird, und dann können Sie Text darauf setzen und tun, was auch immer Sie wollen.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+1

Ich erweiterte schließlich ListRowPresenter und überschrieb den onBindViewHolder, obwohl ich eine Überprüfung hinzufügen musste, um zu sehen, ob meine zusätzlichen Ansichten bereits hinzugefügt wurden oder nicht (da aus irgendeinem Grund onCreateView als final markiert ist). Ich wünschte wirklich, ich könnte es onCreate tun, so ist es sicher nur einmal getan und nicht jedes Mal überprüft, aber ich denke, das ist in Ordnung. Wie zum Anpassen der Kopfzeile, wissen Sie, ob es eine Möglichkeit gibt, dies zu tun, indem Sie das Lehnen-Thema erweitern, einige Werte überschreiben und dieses Thema für Ihre Aktivität festlegen? –