Как сделать родительскую заливку + wrap_content (в таком порядке) Android - PullRequest
1 голос
/ 18 августа 2011

Я попытаюсь упростить проблему, чтобы избежать длинных фрагментов кода: я хочу сделать что-то подобное в моем макете

Target

Структура должна быть простой с чем-то вроде:

 LinearLayoutA (vertical)
      LinearLayoutB (vertical)
           LinearLayoutC    (horizontal)
           LinearLayoutC'   (horizontal)
      LinearLayoutB' (vertical)
           LinearLayoutC''  (horizontal)
           LinearLayoutC''' (horizontal)
  All with weight=1

проблема для меня состоит в том, чтобы определить, что поместить в LinearLayoutC.Поэтому теперь фокусируемся на элементах внутри LinearLayoutC:

Моим первым вариантом был еще один LinearLayout (вертикальный), проблема в том, что если изображение выше, чем LinearLayoutC, TextView не виден.

Итак, я использовал этот RelativeLayout:

<RelativeLayout
    android:id="@+id/RelativeLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Eiffel"
        android:textSize="45sp"
        android:id="@+id/text"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
    ></TextView>
    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/eiffel2"
        android:id="@+id/image"
        android:layout_above="@id/text"
    android:layout_centerHorizontal="true"></ImageView>

</RelativeLayout>

Отлично, это работает!Но ненадолго = (. (Теперь мы будем называть его RelativeLayout1). Когда экран меньше, чем представления, компоновка кажется идеальной, но при переходе на экран большего размера блок выравнивается по низу родительского элемента, и я хотел быон должен быть центрирован на экране (или подслое). Как показано на этом экране:

Problem

Это происходит из-за android: layout_alignParentBottom = "true" в TextView.

Попытка решить, что я использовал RelativeLayout2 для обтекания RelativeLayout1 с кодом, подобным следующему:

<RelativeLayout2
android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>

     <RelativeLayout1
      android:layout_centerInParent="true"
      .....
     ></RelativeLayout1>

 </RelativeLayout2>

Но даже с этим макет RelativeLayout1 по-прежнему выравнивается по низу изображения (и заполняетэкран вертикально, так как он имел высоту = fill_parent, и я не понимаю, почему это происходит и как я могу это решить. Пожалуйста, вы можете мне помочь? Я пытался в течение нескольких часов. Заранее спасибо

Ответы [ 6 ]

2 голосов
/ 18 августа 2011

Добавить android:adjustViewBounds="true" в вашем ImageView

1 голос
/ 18 августа 2011

удалите android:layout_alignParentBottom="true" из текстового представления и добавьте его к корневому тегу относительной задержки android:layout_centerInParent="true"

0 голосов
/ 18 августа 2011

комплект

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"

в ImageView и TextView, а затем используйте LinearLayout (с гравитацией = центр) в качестве контейнера, и он работает

0 голосов
/ 18 августа 2011

используйте android: layout_height = "wrap_content" для вашего второго RelativeLayout

0 голосов
/ 18 августа 2011

Рассматривали ли вы использование TableLayout?Лучше всего подходит для видов, подобных сетке, таких как этот.Вы даже можете указать веса для разных столбцов и т. Д. И иметь разную ширину столбцов.

0 голосов
/ 18 августа 2011

Я отладил ваш код .. попробуйте это:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/RelativeLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity = "center_vertical" >

    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/eiffel2"
        android:id="@+id/image"
        android:layout_centerHorizontal = "true"

    />

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Eiffel"
        android:textSize="45sp"
        android:id="@+id/text"
        android:layout_below = "@+id/image"
        android:layout_centerHorizontal = "true"
    />

</RelativeLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...