A publicação do Blog do desenvolvedor AndroidGridLayout
mostra este diagrama de como os spans afetam a alocação automática de índice:
Eu estou tentando realmente implementar isso usando um GridLayout
. Aqui está o que eu tenho até agora:
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:orientation="horizontal"
app:columnCount="8">
<Button
app:layout_columnSpan="2"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_1"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_2"/>
<Button
app:layout_rowSpan="4"
android:text="@string/string_3"/>
<Button
app:layout_columnSpan="3"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_4"/>
<Button
app:layout_columnSpan="3"
android:layout_gravity="fill_horizontal"
android:text="@string/string_5"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_6"/>
<android.support.v7.widget.Space
app:layout_column="0"
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
</android.support.v7.widget.GridLayout>
Eu tive que apresentar os <Space>
elementos para garantir que cada coluna tivesse uma largura mínima; caso contrário, eu teria um monte de colunas de largura zero.
No entanto, mesmo com eles, recebo o seguinte:
Notavelmente:
Apesar disso
android:layout_gravity="fill_horizontal"
, meus widgets com extensão de coluna não preenchem as colunas estendidasApesar dos
android:layout_rowSpan
valores, nada abrange linhas
Alguém pode reproduzir o diagrama da postagem do blog usando a GridLayout
?
Obrigado!
android
android-gridlayout
CommonsWare
fonte
fonte
Respostas:
Parece bastante hacky, mas consegui obter a aparência correta adicionando uma coluna e linha extra além do necessário. Em seguida, preenchi a coluna extra com um espaço em cada linha, definindo uma altura e preenchi a linha extra com um espaço em cada coluna, definindo uma largura. Para maior flexibilidade, imagino que esses tamanhos de espaço possam ser definidos no código para fornecer algo semelhante aos pesos. Tentei adicionar uma captura de tela, mas não tenho a reputação necessária.
fonte
Space
elementos. Eu adicionei uma captura de tela para futuros leitores. Obrigado!rowCount
conjunto está definido como 8? Precisamos de 4 linhas (o tamanho da maiorrowSpan
) e a mais uma paraSpace
que seja 5. O que estou perdendo?<Gridlayout>
em oposição a<android.support.v7.widget.GridLayout>
fonte
GridLayout
pacote de suporte do Android, o layout será interrompido, sugerindo que os dois não são completamente compatíveis. Além disso, espero realmente que haja uma maneira de fazer isso que não envolva os tamanhos de conexão dos widgets. Vou deixar isso rolar um pouco, para ver que outras respostas chegam (se houver), mas aceito as suas se nada melhor aparecer. Obrigado novamente!android:
atributos necessários em umapp:
, usando o espaço de nome XML do backport. Funciona com o backport.Você precisa definir layout_gravity e layout_columntWeight em suas colunas
fonte
A biblioteca GridLayout do Suporte Android V7 facilita a distribuição excessiva de espaço, acomodando o princípio do peso. Para esticar uma coluna, verifique se os componentes dentro dela definem um peso ou uma gravidade. Para impedir que uma coluna se estique, verifique se um dos componentes da coluna não define um peso ou uma gravidade. Lembre-se de adicionar dependência para esta biblioteca. Adicione com.android.support:gridlayout-v7:25.0.1 em build.gradle.
fonte
A partir da API 21, o GridLayout agora suporta o peso como LinearLayout. Para mais detalhes, consulte o link abaixo:
https://stackoverflow.com/a/31089200/1296944
fonte