По-прежнему возникают проблемы с GridViews - PullRequest
1 голос
/ 23 марта 2012

После двух лет разработки под 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 - что я делал для Начните с того, что означает, что мне придется вручную устанавливать размеры изображений для каждой перестановки устройств.

Так что ... мне интересно, пропустил ли я здесь трюк - должен ли я вначале зашить изображения в мою папку для рисования и вручную устанавливать размеры для каждой перестановки? Должен ли я нарисовать новый набор изображений для всех комбинаций размера экрана и разрешения?

Как я могу гарантировать, что что бы я ни делал, оно будет хорошо смотреться на устройстве, на котором я его не тестировал?

В любом случае, я чувствую, что я делаю что-то не так, но я не могу понять, как это сделать правильно, без особых хлопот. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 23 марта 2012

Я не уверен, что вы имеете в виду под «форсированием размеров для каждой перестановки», но вы можете поместить в соответствующие папки элементы нужного размера:

  • рисуем-MDPI
  • рисуем-большой-MDPI

Каждое устройство выберет нужные рисунки из соответствующей папки, и вы можете разделить обычные и большие изображения для устройств MDPI.

Разве это не решит твою проблему?

P.S .: Папка drawable предназначена только для рисования в формате XML или фотографий, которые не зависят от плотности устройства, а не изображений для пользовательского интерфейса. Они будут правильно масштабироваться для каждого разрешения и плотности.

...