Линейное описание и изображения Android

#android #android-linearlayout

#Android #android-linearlayout

Вопрос:

Хорошо, я знаю, что это не может быть сложно, но у меня чертовски много времени.. Я опытный Java-программист, но очень новичок в Android (хорошо, поэтому я все еще работаю над своим первым тестовым приложением …)

Я хотел бы иметь 3 изображения на экране, одно «основное» изображение, которое занимает, скажем, верхние 75% экрана, затем два меньших изображения, расположенных горизонтально под ним. (Представьте галерею, в которой отображается основное (текущее) изображение, значок «предыдущего» изображения под ним слева и значок «следующего» изображения под основным справа).

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

Я понимаю, что могу установить высоту основного изображения на заданное количество падений, и это сработало, но тогда, если мое приложение перейдет на устройство с другой плотностью, это будет выглядеть глупо. Я пытался играть с android: layout_weight, но безуспешно. Я подумал, что если я установлю layout_weights равным, это заставит представления занимать одинаковую пропорцию, но «основное» изображение всегда доминирует и приводит к тому, что маленькие изображения обрезаются внизу или полностью удаляются с экрана.

Я также понимаю, что, вероятно, мог бы использовать другие макеты, но кажется таким простым, чтобы корневой макет был вертикальным линейным описанием, состоящим из изображения, и горизонтальным линейным описанием, состоящим из 2 изображений. Что-то вроде этого:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >

  <ImageView
    android:id="@ id/cbPicView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/cb1"
    android:layout_weight="1"
  />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    >

    <ImageView
      android:id="@ id/cbPrevPicView"
      android:layout_width="50dip"
      android:layout_height="50dip"
      android:src="@drawable/cb4"
      android:layout_weight="1"
    />

    <ImageView
      android:id="@ id/cbNextPicView"
      android:layout_width="50dip"
      android:layout_height="50dip"
      android:src="@drawable/cb2"
      android:layout_weight="1"
    />
  </LinearLayout>
</LinearLayout>
  

Извините за длину — пытаюсь предоставить как можно больше деталей. Спасибо!

Комментарии:

1. попробуйте установить высоту в 0dip, но сохраните параметр layout_weight

2. Попробовал установить для первого ImageView (основного) значение 0dip с весом 1, а для второго LinearLayout значение 0dip с весом 1. Теперь все, что я получаю, это пустой экран при его запуске?

3. Упс — моя ошибка — я установил ширину и высоту в 0dip, неудивительно, что их там не было.. Ваше предложение работает! Большое вам спасибо — можете ли вы объяснить, почему это работает?

4. Отлично — теперь, если я установлю для основного ImageView layout_weight значение 3, а для внутреннего LinearLayout значение 1, я получу эффект 75/25, который я тоже хотел! Спасибо, Кевин!

5. я думаю, это потому, что установка веса или высоты на 0 позволяет переопределять вес

Ответ №1:

Это сделает что-то вроде:

 -------

   1

-------
 2 | 3
-------
  

Макет:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >

  <ImageView
    android:id="@ id/cbPicView"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/cb1"
    android:layout_weight="3"
  />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    >

    <ImageView
      android:id="@ id/cbPrevPicView"
      android:layout_width="0dp"
      android:layout_height="fill_parent"
      android:src="@drawable/cb4"
      android:layout_weight="1"
    />

    <ImageView
      android:id="@ id/cbNextPicView"
      android:layout_width="0dp"
      android:layout_height="fill_parent"
      android:src="@drawable/cb2"
      android:layout_weight="1"
    />
  </LinearLayout>
</LinearLayout>