Разметка подпредставлений в макете программно - PullRequest
3 голосов
/ 20 августа 2011

Я пытаюсь расположить представления в относительной схеме на планшете, очень похоже на книжную полку. Будет так много поперек, тогда будет создан новый ряд.

Мое начальное состояние выглядит так:

  <ScrollView
    android:layout_marginTop="150sp"
    android:layout_marginLeft="50sp"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <RelativeLayout
      android:id="@+id/user_list"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">

      <!-- Add User Avatar -->
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:src="@drawable/user_frame" />
            <ImageView
                android:id="@+id/demo_image"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:src="@drawable/add_user"
                android:layout_marginLeft="10px" />
            <ImageView
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:src="@drawable/user_name_background"
                android:layout_marginLeft="10px" />
            <TextView
                android:id="@+id/user_name"
                android:layout_width="180px"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:gravity="center_horizontal"
                android:text="Add New User" />
        </RelativeLayout>

      </RelativeLayout>
  </ScrollView>

Я выбираю записи из базы данных, и для каждой записи мне нужно разместить версию раздела «Добавить аватара пользователя», как показано выше. Я хотел бы сделать 5, затем перенести в новый ряд.

Моя первоначальная идея состояла в том, чтобы использовать инфлятор макета и программно добавлять представления, используя RelativeLayout.LayoutParams для установки значений layout_toRightOf.

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

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

Программная разметка видов довольно проста.Я делаю это для всех моих действий / взглядов.Мне нравится концепция компоновки XML в Android, но я считаю, что как только представления становятся полностью динамическими на основе внешних данных (таких как ваша база данных), они становятся слишком сложными.

Я выбираю, какой будет моя внешняя компоновка, и затемтолько создать экземпляр этого макета в XML.Затем в своей деятельности я нахожу внешний макет, используя обычный вызов find by id, а затем использую последовательность вызовов метода add (View), чтобы добавить мои динамически созданные представления или макеты по мере необходимости.

Вам нужно будет принятьучитывать различные ориентации экрана, плотность пикселей и размеры.Независимые от устройства пиксели станут вашим другом.Например, чтобы создать представление изображения, вы должны загрузить растровое изображение, выяснить, сколько его изменить (если необходимо), а затем установить его в качестве объекта для нового экземпляра ImageView, который затем добавите в макет.

Похоже, что ваш внешний макет будет представлением прокрутки с вертикальным линейным макетом внутри, который затем имеет горизонтальный макет для каждой "полки", который затем имеет до пяти изображений для каждой "книги"

3 голосов
/ 20 августа 2011

Есть несколько вариантов, которые я могу придумать.

  1. Вместо использования относительной компоновки, почему бы не использовать LinearLayouts с атрибутом горизонтальной?LinearLayout
  2. Используйте ListView с настраиваемым адаптером, чтобы заполнить пять «Добавить аватара пользователя» для ListRow
...