0

Ich möchte mehrere horizontalgridview erstellen und jeder gridview haben Titel darüber. Ich habe es bereits erfolgreich gemacht und das Ergebnis entspricht meinem Wunsch, aber meine App wird so schwer.android - Mehrere horizontalgridview mit Titel

Meine aktuelle Ansicht ist wie folgt:

ich ein Linearlayout haben, die eine Textview und eine horizontalgridview enthält. nennen wir es item_layout

Ich werde mehrere Item_layout dynamisch zu einem benutzerdefinierten LinearLayout hinzufügen (ich nannte es SectionView) im main_layout. Der Code ist in etwa so (nicht meinem richtigen Code):

public class SectionedView extends LinearLayout{ 
    ... 
    public void setData(ArrayList<Object> object){ 
     for(Object o:object){ 
      View view = ... 
      title = (TextView)view.findViewById(R.id.title); 
      gridView = (GridView)view.findViewById(R.id.content); 
      title.setText(o.getTitle()); 
      adapter = new Adapter(o.getItems()); 
      gridView.setAdapter(adapter); 
      addView(view); 
     } 
    } 
    ... 
} 

Die individuelle Linearlayout in der main_layout in einem Scrollview befindet. Dieses

ist Beispiel der main_layout

und dies ist beispielsweise das Linearlayouts innerhalb main_layout (im Grunde das gleiche ist mit früherem Bild).

enter image description here

Meine Frage ist nicht jeder wissen, besser Abhilfe für dieses, wie und warum? Danke!

bearbeiten: zu navigieren ich ein Android-TV-App erschaffe so brauche ich Fokus für jedes Einzelteil zu erhalten. aber ich habe versucht, RecyclerView innen RecyclerView könnte die innere RecyclerView nicht erhalten konzentrieren :(

Antwort

0

Zuerst müssen Sie einen RecyclerView mit einem Vertical Layoutmanager erstellen. Die RecyclerView-Elemente sind ein TextView (der Titel) und ein RecyclerView mit einem horizontalen LayoutManager. In der horizontalen RecyclerView legen Sie Ihre Inhalte ab.

Damit die Elemente des RecyclerView den Fokus erhalten, müssen Sie android:descendantFocusability="afterDescendants" in Ihrem RecyclerView eingeben.

Und für die Elemente können Sie hinzufügen müssen:

android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:clickable="true" 

Sie Probleme mit dem anfänglichen Fokus haben, aber in diesem Fall müssen Sie es manuell einstellen, yourView.requestFocus() in der Ansicht verwenden, brauchen Fangen Sie konzentriert an.

Dann fügen Sie einfach eine Drawable für die RecyclerView-Elemente hinzu, die anzeigt, ob sie fokussiert ist oder nicht.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
     android:drawable="@drawable/your_pressed" /> <!-- pressed --> 
<item android:state_focused="true" 
     android:drawable="@drawable/your_focused" /> <!-- focused --> 
<item android:state_hovered="true" 
     android:drawable="@drawable/your_hovered" /> <!-- hovered --> 
<item android:drawable="@drawable/your_default" /> <!-- default --> </selector> 
+0

Ich verwende HorizontalGridView (das ist eine Recyclerview auch aus der Lehneback-Bibliothek) anstelle von RecyclerView mit einem horizontalen Layout-Manager, aber im Grunde sind beide gleich, denke ich. Der "afterdescendants" -Teil ist wichtig, da die Elemente in der inneren Recycler-Ansicht nicht richtig fokussiert werden können! Danke! – Kyk

0

Grundsätzlich Ihr Layout wie Google sieht aktuellen Spielen design.You kann dies erreichen, indem Einzel RecyclerView mit enthalten Horizontal RecyclerViews mit Textview als Titel.

+0

Hallo! Ich habe gerade versucht, was Sie gesagt haben, aber die HorizontalGridView innerhalb kann nicht den Fokus bekommen. Ich vergesse zu erwähnen, dass ich eine TV-App zu schaffen, so brauche ich Fokus für jeden Artikel – Kyk

+0

was Sie mit Fokus meinen.Ich verstehe es nicht.Ich habe keine Ahnung über TV-App. – Joker

0

Versuchen Sie TwoWayGridView zu verwenden.Es kann als Drop-In-Ersatz für das normale Android GridView verwendet werden.Ein Android GridView kann so konfiguriert werden, horizontal oder vertikal zu scrollen.

Attribute:

  • scrollDirectionPortrait (vertical | horizontal) - Die Richtung der Gitter bewegen wird, wenn das Gerät im Hochformat ist
  • scrollDirectionLandscape (vertical | horizontal) - Die Richtung der Gitter wird geblättert, wenn sich das Gerät im Querformat befindet
  • numRows (ganze Zahl) - Anzahl der Zeilen in der Rasteransicht, wenn in der horizontalen Bildlaufleiste
  • ing Modus
  • verticalSpacing (dimension) - Höhe des vertikalen Abstands zwischen den Rasterzeilen
  • rowHeight (Abmessung) - Höhe jeder Gitterreihe

Hier ist ein Beispiel aus dem Demo-Layout, wo es konfiguriert ist vertikal im Hoch- und horizontal in der Landschaft blättern:

<?xml version="1.0" encoding="utf-8"?> 
<com.jess.ui.TwoWayGridView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:background="#E8E8E8" 
android:id="@+id/gridview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
app:cacheColorHint="#E8E8E8" 
app:columnWidth="80dp" 
app:rowHeight="80dp" 
app:numColumns="auto_fit" 
app:numRows="auto_fit" 
app:verticalSpacing="16dp" 
app:horizontalSpacing="16dp" 
app:stretchMode="spacingWidthUniform" 
app:scrollDirectionPortrait="vertical" 
app:scrollDirectionLandscape="horizontal" 
app:gravity="center"/>