Компоновка компонентов по горизонтали в Android

1

Я пытаюсь создать макет в Android для уведомления. Моя цель - показать следующее:

1: значок для приложения 2: вертикально сложенная LinearLayout с названием сессии и комнатой, которая должна состояться в 3: время начала сеанса

Проблема, с которой я сталкиваюсь, состоит в том, что # 2 имеет переменную ширину в зависимости от размера заголовка. Hardcoding ширина будет выглядеть ужасно, если пользователь переключит трубку в сторону и перейдет в альбомный режим. Поэтому вот мой вопрос:

Как я могу разместить три компонента по горизонтали в Android таким образом, чтобы # 1 и # 3 были выровнены влево и вправо соответственно, а # 2 просто занимает оставшееся пространство?

Теги:
layout
mobile

4 ответа

0

После битвы с этим в течение нескольких часов я понял, как использовать layout_weight. Похоже, это было подходящим средством для решения проблемы.

0

Что-то вроде этого может быть разумной основой:

<RelativeLayout
      android:id="@+id/RelativeLayout01"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="horizontal"
      xmlns:android="http://schemas.android.com/apk/res/android">
      <ImageView
            android:id="@+id/ImageView01"
            android:src="@drawable/droid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"></ImageView>
      <LinearLayout
            android:id="@+id/LinearLayout01"
            android:layout_below="@id/ImageView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_alignTop="@+id/ImageView01"
            android:layout_toRightOf="@+id/ImageView01" 
            android:background="#ffff00">
            <TextView
                  android:text="This is wide, wide, title text"
                  android:id="@+id/TextView01"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"></TextView>
            <TextView
                  android:text="Short text"
                  android:id="@+id/TextView02"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"></TextView>
            <TextView
                  android:text="Middling wide text"
                  android:id="@+id/TextView03"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"></TextView>

</LinearLayout>
      <TextView
            android:text="Right hand text"
            android:id="@+id/TextView04"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/ImageView01" 
            android:background="#00ffff"></TextView>
</RelativeLayout>

Вам может потребоваться жесткое кодирование некоторого левого поля на LinearLayout, чтобы дать ему немного пробелов

0

Посмотрите RelativeLayout. Вы можете сделать свой средний LinearLayout с помощью android: layout_toLeftOf и android: layout_toRightOf, чтобы заставить его быть посередине. Я обычно ссылаюсь на страницу Android Common Layout Object для быстрого примера, чтобы начать. Там может быть небольшое предостережение, которое мне не хватает, но я знаю, что общий трюк, который я использовал однажды, и я уверен, что он сработал.

0

попробуйте что-то вроде этого:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <ImageView android:id="@+id/img1"
        android:background="#00F"
        android:layout_width="100dip"
        android:layout_height="100dip"
        android:layout_alignParentLeft="true"/>
    <ImageView android:id="@+id/img2"
        android:background="#0F0"
        android:layout_width="0dip"
        android:layout_height="100dip"
        android:layout_toRightOf="@id/img1"
        android:layout_toLeftOf="@+id/img3"/>
    <ImageView android:id="@+id/img3"
        android:background="#F00"
        android:layout_width="150dip"
        android:layout_height="100dip"
        android:layout_alignParentRight="true"/>
</RelativeLayout>
  • 0
    ОП конкретно заявил, что не хочет использовать жестко закодированные значения для ширины.
  • 0
    @ user432209 это было просто для примера. это также может быть сделано с помощью wrap_content, я просто помещаю эти значения, чтобы имитировать содержимое для переноса.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню