#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>