Я пытаюсь отобразить 8 элементов в сетке. К сожалению, высота gridview всегда слишком мала, поэтому отображается только первая строка и небольшая часть второй.
Настройка android:layout_height="300dp"
заставляет это работать. wrap_ content
и, fill_parent
видимо, нет.
Моя сетка:
<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" />
Ресурс "Мои предметы":
<?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>
Проблема, похоже, не связана с нехваткой вертикального пространства.
Что я могу сделать ?
Ответы:
После (слишком долгого ) исследования я наткнулся на отличный ответ Нила Трафта .
Адаптировать его работу к
GridView
игре было очень легко.ExpandableHeightGridView.java:
Включите его в свой макет следующим образом:
Наконец, вам просто нужно попросить его расширить:
источник
После использования ответа от @tacone и проверки его работоспособности я решил попробовать сократить код. Это мой результат. PS: Это эквивалент того, что для логического ответа «расширенный» в tacones всегда установлено значение true.
источник
Другой аналогичный подход, который сработал для меня, - это вычислить высоту для одной строки, а затем со статическими данными (вы можете адаптировать их для разбивки на страницы) вы можете рассчитать, сколько строк у вас есть, и легко изменить размер высоты GridView.
Используйте этот код после настройки адаптера и при отрисовке GridView, иначе вы получите height = 0.
источник
int rows = items / columns + 1;
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
Найденные тиконы полезны ... поэтому я перенес его на C # (Xamarin)
источник
Просто рассчитайте высоту для AT_MOST и установите ее по мере измерения. Здесь GridView Scroll так работать не будет. Необходимо явно использовать вертикальную прокрутку.
источник