根据屏幕尺寸自动调整网格视图列数

6
我正在使用Gridview,并且我想在其中展示一些图片。我希望我的gridview在各种屏幕尺寸上都能够良好地显示。我的应用程序面向不同的安卓设备,例如普通设备三星Galaxy Grand、7英寸设备Samsung tab 4以及最终的10英寸设备三星tab 10。

因此,我希望我的gridview能够根据屏幕大小自动调整列数,例如在三星Tab 10英寸上显示4列,而在7英寸和其他设备上按比例显示3列或2列等等。

目前为止,我所做的是简单的事情,我制作了一个图像数组并将适配器设置为gridview,这是简单的代码,并与我的问题无关,因此我不会分享该代码。我XML中的设计如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnWidth="250dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:verticalSpacing="50dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />

</LinearLayout>

请帮我解决这个问题。如何使列数自适应屏幕宽度?


请看这里 - https://dev59.com/5Ww05IYBdhLWcg3w9mnd#7874011 - Oleksandr
我知道这个被接受的答案,但我不知道他是如何工作的。 - Coas Mckey
我已经尝试了你的代码,它可以运行良好。问题出在哪里? - Oleksandr
@Alexandr,你测试过我的代码在哪些设备上? - Coas Mckey
让我们在聊天中继续这个讨论 - Coas Mckey
显示剩余2条评论
1个回答

8

只需在不同的屏幕尺寸上使用不同数量的列 - 在不同的values文件夹(small、normal、large、xlarge)中覆盖值,详见文档

示例:

活动或片段:

<GridView
    android:id="@+id/gridview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="@integer/column_count"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:verticalSpacing="50dp"
    />

项目:

<ImageView
    android:id="@+id/image"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

values/integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="column_count">2</integer>
</resources>

values-large/integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="column_count">3</integer>
</resources>

values-xlarge/integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="column_count">4</integer>
</resources>

是的,最后一件事情会像这样,我也在考虑这个问题,但想知道是否有其他方式可以实现。 - Coas Mckey
@CoasMckey,您可以根据屏幕大小计算此值。但是,在我的看法中,最好使用平台为您提供的东西,特别是在Android中涉及屏幕尺寸时。 - Oleksandr
1
在我看来,这仍然有点荒谬,因为HTML/CSS可以轻松地完成它,并且以一种可以适应你意想不到的尺寸的方式进行缩放。 - Bryan K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接