经过两年的 Android 开发,我仍然不能 100% 确定我需要提供哪些资源才能使我的 GridView 在不同尺寸和分辨率的设备上工作。
我还在学习,例如我最近发现你不必提供所有屏幕尺寸的每个可绘制对象——如果你在 xhdpi 中放置一些东西,那么 Android 足够聪明,可以在大多数时间动态调整它的大小——但是那里有几个怪癖。例如,如果我尝试使用仅在 a 中 mdpi 设备上的 drawable-xhdpi bin 中定义的可绘制对象,则可绘制对象GridView
将在视觉上正确调整大小,但它周围的空白不会 - 这仍然是原始大小。最初我通过强制定义所有方面的维度来解决这个问题GridView
和相关的适配器视图,但是这周围有很多代码气味,所以我手动调整了可绘制对象的大小,将它们放入各自的箱中(drawable-mdpi、drawable-hdpi 和 drawable-xhdpi)并删除了所有强制图像尺寸等
所以我目前有:
<GridView
android:id="@id/home_image_grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="100dp"
android:gravity="center"
android:listSelector="#00000000"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
>
</GridView>
每个项目的布局是:
<?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:layout_margin="0dip"
android:gravity="center"
android:orientation="vertical"
android:padding="0dip">
<ImageView
android:id="@id/home_button_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@id/home_button_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@color/default_text_colour"
android:textSize="@dimen/home_button_text"
/>
</LinearLayout>
到现在为止还挺好...
我目前正在开发的应用程序几乎已经完成,并且已经在不同的设备上进行了一些测试——它在正常屏幕尺寸的 xhdpi、hdpi 和 mdpi 设备上看起来不错。然后我将测试扩展到其他设备——我在一个大屏幕尺寸的 HTC Flyer 上进行测试,mdpi——而 gridview 现在看起来很垃圾——它正确地拾取了很小的 mdpi 图像。
做了一些阅读,我找到了GridView
教程GridView
教程,它说把你所有的drawables放在'drawable'bin中,所以我遵循了这个建议,一切看起来都很垃圾 - 仔细检查(并且实际上通读了示例代码)似乎他们正在手动设置每个图像的大小GridView
- 我一开始就这样做了,这意味着我将不得不为每个设备排列手动设置图像大小。
所以..我想知道我是否在这里错过了一个技巧 - 我是否应该采用第一种方法将图像粘贴在我的可绘制文件夹中并手动强制每个 purmutation 的大小?我应该为屏幕尺寸和分辨率的所有排列绘制一组新图像吗?
我如何保证无论我做什么,它在我没有测试过的设备上看起来都不错?
无论哪种方式,感觉就像我做错了什么 - 但我无法弄清楚如何在没有大量麻烦的情况下正确地做到这一点。任何人都可以帮忙吗?