Próbuję wyświetlić 8 elementów w widoku siatki. Niestety wysokość widoku siatki jest zawsze za mała, więc pokazuje tylko pierwszy wiersz i niewielką część drugiego.
Ustawienie android:layout_height="300dp"
sprawia, że to działa. wrap_ content
i fill_parent
najwyraźniej nie.
Mój widok siatki:
<GridView
android:id="@+id/myId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="2dp"
android:isScrollContainer="false"
android:numColumns="4"
android:stretchMode="columnWidth"
android:verticalSpacing="20dp" />
Moje przedmioty:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:minHeight="?android:attr/listPreferredItemHeight" >
<ImageView
android:id="@+id/appItemIcon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_dialog_info"
android:scaleType="center" />
<TextView
android:id="@+id/appItemText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My long application name"
android:gravity="center_horizontal"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
Wydaje się, że problem nie jest związany z brakiem przestrzeni w pionie.
Co mogę zrobić ?
Odpowiedzi:
Po (zbyt wielu) badaniach natknąłem się na doskonałą odpowiedź Neila Trafta .
Dostosowanie jego pracy do tego
GridView
było niezwykle łatwe.ExpandableHeightGridView.java:
Uwzględnij go w swoim układzie w następujący sposób:
Na koniec wystarczy poprosić go o rozszerzenie:
źródło
Po skorzystaniu z odpowiedzi z @tacone i upewnieniu się, że działa, postanowiłem skrócić kod. To jest mój wynik. PS: Jest to równoważne z ustawieniem wartości logicznej „rozszerzonej” w tonach odpowiedzi zawsze na prawdę.
źródło
Innym podobnym podejściem, które zadziałało w moim przypadku, jest obliczenie wysokości dla jednego wiersza, a następnie za pomocą danych statycznych (można je dostosować do podziału na strony) można obliczyć liczbę posiadanych wierszy i łatwo zmienić rozmiar widoku GridView.
Użyj tego kodu po ustawieniu karty i podczas rysowania widoku GridView lub uzyskasz wysokość = 0.
źródło
int rows = items / columns + 1;
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
Znaleziono odpowiedzi na tacones helpfull ... więc przeportowałem go do C # (Xamarin)
źródło
Wystarczy obliczyć wysokość dla AT_MOST i ustawić na miarę. Tutaj GridView Scroll nie będzie działać. Trzeba jawnie używać widoku przewijania w pionie.
źródło