После двух лет разработки Android я все еще не уверен на 100% о том, какие ресурсы мне нужно предоставить, чтобы мой GridView работал на разных устройствах размера и разрешения.
Я все еще участвую, например, недавно я обнаружил, что вам не нужно поставлять все чертежи во всех размерах экрана - если вы поместите что-то в xhdpi, тогда Android будет достаточно умным, чтобы изменять его размер на лету большую часть времени - но там это несколько причуд. Например, если я попытаюсь использовать чертежи, которые определены только в контейнере drawable-xhdpi на устройстве mdpi в GridView
, то drawable будет визуально изменяться правильно, но пробелы вокруг него не будут - это все равно будет исходный размер. Первоначально я обошел это, убедительно определяя размеры для всех аспектов 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
учебник, который говорит, чтобы поместить все вводимый коэффициент в "вытяжке" бункер, так что я последовал этот совет и снова все выглядело сор - при ближайшем рассмотрении (и, на самом деле прочитать пример кода) кажется, что они вручную устанавливают размер каждого изображения в GridView
- который я делал для начала, а это значит, что мне придется вручную устанавливать размеры изображений для каждой перестановки устройств.
Итак... Я не задаюсь вопросом, не пропустил ли я здесь трюк - должен ли я сделать первый подход к прикреплению изображений в моей папке с возможностью выгрузки и вручную заставлять размеры для каждой хватки? Должен ли я рисовать новый набор изображений для всех перестановок размера и разрешения экрана?
Как я могу гарантировать, что все, что я делаю, будет хорошо выглядеть на устройстве, на котором я его не тестировал?
В любом случае мне кажется, что я делаю что-то неправильно, но я не могу понять, как это сделать, без лишних хлопот. Может ли кто-нибудь помочь?
Я не уверен, что вы подразумеваете под "форсированием размеров для каждой перестановки", но вы можете поместить соответствующие размеры в следующие папки:
Каждое устройство будет выбирать правильные чертежи из соответствующей папки, и вы можете отделять обычные и большие изображения для устройств mdpi.
Разве это не исправить вашу проблему?
PS: drawable
папка предназначена только для XML-чертежей или фотографий, которые не зависят от плотности устройства, а не от изображений для пользовательского интерфейса. Они будут масштабироваться должным образом для каждого разрешения и плотности.
drawable-Xdpi
и предоставлять конкретные drawables для каждой плотности. Если у вас есть XML Drawables, поместите их в папкуdrawable
. Вы можете поместить копию XML-файла в каждую папкуdrawable-Xdpi
но это не поможет. В любом случае, вы пробовали то, что я предложил?