Estou tentando exibir 8 itens dentro de um gridview. Infelizmente, a altura do gridview é sempre muito pequena, de modo que apenas mostra a primeira linha e uma pequena parte da segunda.
Configuração android:layout_height="300dp"
faz funcionar. wrap_ content
e fill_parent
aparentemente não.
Minha visualização em grade:
<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" />
Meu recurso de itens:
<?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>
O problema não parece relacionado à falta de espaço vertical.
O que eu posso fazer ?
Respostas:
Após (muita) pesquisa, encontrei a excelente resposta de Neil Traft .
Adaptar seu trabalho para o trabalho
GridView
foi extremamente fácil.ExpandableHeightGridView.java:
Inclua-o no seu layout assim:
Por fim, você só precisa pedir para expandir:
fonte
Depois de usar a resposta do @tacone e garantir que funcionasse, decidi tentar abreviar o código. Este é o meu resultado. PS: É o equivalente a ter a resposta booleana "expandida" nos tacones sempre definida como verdadeira.
fonte
Outra abordagem semelhante que funcionou para mim é calcular a altura de uma linha e, em seguida, com dados estáticos (você pode adaptá-lo para paginar), você pode calcular quantas linhas você possui e redimensionar a altura do GridView facilmente.
Use este código depois de configurar o adaptador e quando o GridView for desenhado, ou você obterá height = 0.
fonte
int rows = items / columns + 1;
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
Os tacones encontrados respondem útil ... então eu o enviei para C # (Xamarin)
fonte
Apenas calcule a altura para AT_MOST e defina-a como medida. Aqui o GridView Scroll não funcionará. Precisa usar a Visualização de rolagem vertical explicitamente.
fonte