Высота Gridview снижается

Я пытаюсь отобразить 8 элементов внутри gridview. К сожалению, высота сетки всегда слишком мала, так что она отображает только первую строку и небольшую часть секунды.

Настройка android:layout_height="300dp" заставляет его работать. wrap_ content и fill_parent видимому, нет.

Мой вид сетки:

  

Ресурс моих товаров:

      

Проблема не связана с отсутствием вертикального пространства.

Что я могу сделать ?

После (слишком много) исследований я наткнулся на отличный ответ Нейла Трэйфта .

Адаптация его работы для GridView была безрезультатной.

ExpandableHeightGridView.java:

 package com.example; public class ExpandableHeightGridView extends GridView { boolean expanded = false; public ExpandableHeightGridView(Context context) { super(context); } public ExpandableHeightGridView(Context context, AttributeSet attrs) { super(context, attrs); } public ExpandableHeightGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public boolean isExpanded() { return expanded; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // HACK! TAKE THAT ANDROID! if (isExpanded()) { // Calculate entire height by providing a very large height hint. // View.MEASURED_SIZE_MASK represents the largest height possible. int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } public void setExpanded(boolean expanded) { this.expanded = expanded; } } 

Включите его в свой макет следующим образом:

  

Наконец, вам просто нужно попросить его расширить:

 mAppsGrid = (ExpandableHeightGridView) findViewById(R.id.myId); mAppsGrid.setExpanded(true); 

После использования ответа от @tacone и убедившись, что это сработало, я решил попробовать закорачивать код. Это мой результат. PS: Это эквивалент того, что логический «расширенный» в ответе tacones всегда задан как true.

 public class StaticGridView extends GridView { public StaticGridView(Context context) { super(context); } public StaticGridView(Context context, AttributeSet attrs) { super(context, attrs); } public StaticGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST)); getLayoutParams().height = getMeasuredHeight(); } } 

Другим подобным подходом, который работал для меня, является вычисление высоты для одной строки, а затем со статическими данными (вы можете адаптировать ее к paginate), вы можете рассчитать, сколько строк у вас есть и легко resize GridView.

  private void resizeGridView(GridView gridView, int items, int columns) { ViewGroup.LayoutParams params = gridView.getLayoutParams(); int oneRowHeight = gridView.getHeight(); int rows = (int) (items / columns); params.height = oneRowHeight * rows; gridView.setLayoutParams(params); } 

Используйте этот код после установки адаптера и при рисовании GridView, или вы получите height = 0.

 gridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (!gridViewResized) { gridViewResized = true; resizeGridView(gridView, numItems, numColumns); } } }); 

Найденные tacones отвечают полезными … поэтому я портировал его на C # (Xamarin)

 public class ExpandableHeightGridView: GridView { bool _isExpanded = false; public ExpandableHeightGridView(Context context) : base(context) { } public ExpandableHeightGridView(Context context, IAttributeSet attrs) : base(context, attrs) { } public ExpandableHeightGridView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle) { } public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; } } protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) { // HACK! TAKE THAT ANDROID! if (IsExpanded) { // Calculate entire height by providing a very large height hint. // View.MEASURED_SIZE_MASK represents the largest height possible. int expandSpec = MeasureSpec.MakeMeasureSpec( View.MeasuredSizeMask, MeasureSpecMode.AtMost); base.OnMeasure(widthMeasureSpec,expandSpec); var layoutParameters = this.LayoutParameters; layoutParameters.Height = this.MeasuredHeight; } else { base.OnMeasure(widthMeasureSpec,heightMeasureSpec); } } } 

Просто вычислите высоту для AT_MOST и установите значение по мере. Здесь GridView Scroll не работает. Необходимо явно использовать вертикальный просмотр прокрутки.

  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int heightSpec; if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { heightSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); } else { // Any other height should be respected as is. heightSpec = heightMeasureSpec; } super.onMeasure(widthMeasureSpec, heightSpec); } 
  • Как изменить новый цвет и высоту индикатора TabLayout
  • Является ли основная нить такой же, как stream пользовательского интерфейса?
  • Android: Как отслеживать происхождение InflateException?
  • Обрезать изображение при выборе из галереи в android
  • Запустить приложение для Android без активности
  • Как получить контакты из родной телефонной книги в Android
  • Редактор макета Android ConstraintLayout
  • Android: Как создавать звуковые эффекты fade-in / fade-out для любого музыкального файла, который играет мое приложение?
  • Android NDK: ПРЕДУПРЕЖДЕНИЕ: APP_PLATFORM андроид-9 больше, чем андроид: minSdkVersion 8
  • в Espresso, как выбрать один вид, у которого одинаковый идентификатор, чтобы избежать AmbiguousViewMatcherException
  • Хостинг исполняемого файла в приложении Android
  • Interesting Posts

    Как я могу позвонить с моего ПК?

    Удаленный запуск машины, находящейся в выключенном состоянии?

    Вставить шрифт в пакет mac

    Инициализация переменных-членов с тем же именем для аргументов конструктора, что и для переменных-членов, разрешенных стандартом C ++?

    Как «вывести» столбец в DataTable с помощью C #?

    Linux: как спящий режим после периода сна

    Как я могу заставить проект Eclipse-Maven автоматически обновлять свой путь к classам, когда я изменяю зависимость в моем файле pom.xml?

    Как заставить OpenVAS прослушивать внешний интерфейс?

    Разница между и в Java

    Как настроить HttpContent для второго параметра HttpClient PostAsync?

    Libcurl или cURL не работает OSX Mavericks

    Статический блок в Java не выполнен

    Как закачать документ в услугу «Угловая 2»

    почему remove-migration запускает мое приложение?

    разделить строку, разделенную запятыми, как с кавычками, так и с номерами без кавычек

    Давайте будем гением компьютера.