Estou tentando fazer um gridview com duas colunas. Quero dizer, duas fotos por linha, lado a lado, assim como esta imagem.
Mas minhas fotos têm espaços entre elas, devido ao fato de não ser do mesmo tamanho. Aqui está o que estou recebendo.
Como você pode ver, a primeira imagem oculta a legenda que mostra o nome e o número de telefone do contato. e as outras fotos não estão esticadas corretamente.
Aqui está o meu arquivo xml do GridView . Como você pode ver, o valor columnWidth
está definido para 200dp . Gostaria que fosse automático , para que as imagens sejam redimensionadas automaticamente para cada tamanho de tela.
<?xml version="1.0" encoding="utf-8"?>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridViewContacts"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="2"
android:columnWidth="200dp"
android:stretchMode="columnWidth"
android:gravity="center" />
e aqui está o arquivo xml do item, que representa cada item em si.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageViewContactIcon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" />
<LinearLayout
android:id="@+id/linearlayoutContactName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="#99000000"
android:layout_alignBottom="@+id/imageViewContactIcon">
<TextView
android:id="@+id/textViewContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:textSize="15sp"
android:text="Lorem Ipsum" />
<TextView
android:id="@+id/textViewContactNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="5dp"
android:focusable="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:textSize="10sp"
android:text="123456789" />
</LinearLayout>
</RelativeLayout>
Então, o que eu quero é mostrar duas imagens por linha, e as imagens são redimensionadas automaticamente, independentemente do tamanho da tela. O que estou fazendo de errado no meu layout?
Obrigado.
scaleType
propriedade centerCrop no ImageView. O que eu preciso alcançar é uma maneira de fazer as fotos lado a lado e redimensionar automaticamente para diferentes tamanhos de tela.Respostas:
Aqui está um método relativamente fácil de fazer isso. Jogue um GridView em seu layout, configurando o modo de alongamento para esticar as larguras das colunas, defina o espaçamento como 0 (ou o que você quiser) e defina o número de colunas como 2:
res / layout / main.xml
Faça um costume
ImageView
que mantenha sua proporção:src / com / exemplo / graphicstest / SquareImageView.java
Faça um layout para um item de grade usando este SquareImageView e defina o scaleType como centerCrop:
res / layout / grid_item.xml
Agora faça algum tipo de adaptador para o seu
GridView
:src / com / exemplo / graphicstest / MyAdapter.java
Defina esse adaptador para o seu
GridView
:E aproveite os resultados:
fonte
ImageView
e por que usar algo assim, em<com.example.graphicstest.SquareImageView>
vez de uma simples<ImageView>
tag no arquivo xml . Você poderia me explicar mais sobre essa relação de aspecto e como a criação dessa classe não afeta os itens. existe uma maneira de otimizar isso, sem a necessidade daImageView
classe personalizada ? obrigado pela sua ajuda de qualquer maneira.outra abordagem simples com itens internos modernos, como o PercentRelativeLayout, agora está disponível para novos usuários que enfrentam esse problema. graças à equipe android para liberar este item.
e para obter um melhor desempenho, você pode usar algumas coisas, como o carregador de imagens picasso, que ajudam a preencher toda a largura de todos os pais de imagens. por exemplo, no seu adaptador, você deve usar isto:
agora você não precisa mais da classe CustomImageView.
PS: eu recomendo usar o ImageView no lugar do Type Int na classe Item.
espero que isso ajude ..
fonte