После двух лет разработки под Android я все еще не уверен на 100%, какие ресурсы мне нужно предоставить, чтобы заставить мой GridView работать на устройствах разных размеров и разрешений.
Я все еще учусь, например, недавно я обнаружил, что у вас нет , чтобы предоставить все элементы рисования для всех размеров экрана - если вы поместите что-то в xhdpi, то Android достаточно умен, чтобы изменить его размер. муха большую часть времени - но есть несколько причуд. Например, если я попытаюсь использовать drawables, которые определены только в bin draw-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
- что я делал для Начните с того, что означает, что мне придется вручную устанавливать размеры изображений для каждой перестановки устройств.
Так что ... мне интересно, пропустил ли я здесь трюк - должен ли я вначале зашить изображения в мою папку для рисования и вручную устанавливать размеры для каждой перестановки? Должен ли я нарисовать новый набор изображений для всех комбинаций размера экрана и разрешения?
Как я могу гарантировать, что что бы я ни делал, оно будет хорошо смотреться на устройстве, на котором я его не тестировал?
В любом случае, я чувствую, что я делаю что-то не так, но я не могу понять, как это сделать правильно, без особых хлопот. Кто-нибудь может помочь?