2013-11-28 3 views
0

Итак, у меня есть ListView с некоторыми элементами в нем, и каждый элемент настраивается с помощью LinearLayout, который содержит два элемента RelativeLayout. Первый (слева) содержит заголовок и субтитр шоу, а в правой - время начала показа, или если оно прошло, оно показывает «MISSED».Как подключить два RelativeLayouts

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

Прямо сейчас я сделал быстрое исправление для этого, сделав левую макет шириной статической, но я хочу, чтобы она автоматически менялась. Как я могу достичь этого?

Это как мой XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/listRoot" 
    android:background="#fff"> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="260dp" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:id="@+id/mainInfoPan" 
     > 

     <!-- TITLE --> 
     <TextView 
      android:id="@+id/title" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Space Holder" 
      android:textColor="#040404" 
      android:textStyle="bold" 
      android:typeface="sans" 
      android:textSize="18sp" 
      android:layout_marginTop="1dip" 
      android:layout_marginLeft="10dp" /> 

     <TextView 
      android:id="@+id/subtitle" 
      android:textStyle="bold" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_below="@+id/naslov" 
      android:textColor="#ff777777" 
      android:textSize="12sp" 
      android:layout_marginLeft="10dp" /> 

    </RelativeLayout> 

    <RelativeLayout 
     android:layout_height="match_parent" 
     android:layout_width="wrap_content" 
     android:layout_toRightOf="@+id/mainInfoPan" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/date" 
      android:text="Space Holder" 
      android:layout_alignParentRight="true" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:textColor="#888" 
      android:textSize="12sp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" /> 

    </RelativeLayout> 


</LinearLayout> 
+0

где ваш 'LinearLayout' ?? Вместо этого вы используете 'RelativeLayout'. – Naddy

+0

О, хорошо, я возился и менял вещи. Отредактировано сообщение, но та же проблема остается. – Squeazer

ответ

1

Начнем с того, что вы избавитесь от этих RelativeLayout и добавьте немного веса. Я немного очистил ваш код.

Если вы не получили желаемых результатов, пожалуйста, отредактируйте ваш вопрос, поскольку это неясно.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:id="@+id/listRoot" 
    android:background="#fff"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="5dp" 
     android:id="@+id/mainInfoPan" 
     > 

     <!-- TITLE --> 
     <TextView 
      android:id="@+id/title" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Space Holder" 
      android:textColor="#040404" 
      android:textStyle="bold" 
      android:typeface="sans" 
      android:textSize="18sp" 
      android:layout_marginTop="1dip" 
      android:layout_marginLeft="10dp" /> 

     <TextView 
      android:id="@+id/subtitle" 
      android:textStyle="bold" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_below="@+id/naslov" 
      android:textColor="#ff777777" 
      android:textSize="12sp" 
      android:layout_marginLeft="10dp" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/date" 
      android:text="Space Holder" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:textColor="#888" 
      android:textSize="12sp" /> 

    </LinearLayout> 


</LinearLayout> 
+0

О, это сработало, спасибо! Один вопрос сложный, если я правильно понимаю вес, он показывает соотношение между взглядами. Но здесь вы использовали вес только на первом макете, а не на втором. Зачем? – Squeazer

+0

Вы можете использовать вес как гибкие контейнеры. Так, например: если у вас есть «ImageView», то есть определенная ширина в 'dp', вы можете иметь представление/сокращать вид сестры, чтобы отвечать на этот размер с весами. Массы по существу соотносятся, так как я использовал только один вес, что 'LinearLayout' будет использовать 100% пустого пространства внутри своего контейнера. Надеюсь, это поможет, дай мне проверить, будь ты!:) –

+0

О, я вижу, спасибо !!! – Squeazer

1

для автоматических размеров вы можете использовать атрибут «вес». атрибута веса делит оставшееся пространство на%, и каждый вид ПОЛУЧИТЬ% его

android:layout_height ="0dip" 

android:layout_weight ="0.7" => this view will get 70% of the available space 

также то, что случилось, когда вы используете «wrap_content» с правильными раскладками и «fill_parent» с левым макетом?

+0

левый макет заполняет все пространство, а правый макет невидим. Кроме того, AndroidStudio сообщает об ошибке в линейном макете: «Неправильная ориентация? Указанная ориентация не указана, а по умолчанию горизонтальна, но этот макет имеет несколько дочерних элементов, где по крайней мере один имеет layout_width = "match_parent" ' – Squeazer

+0

. Я попробую с весом и посмотрю, что произойдет. – Squeazer

1

Вы можете использовать один RelativeLayout, без детей раскладок, установите время/пропущенных TextView в

android:layout_alignParentRight="true" 
android:layout_centerVertical="true" 

Использование по названию:

android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true" 
android:layout_toStartOf="@+id/date" 

и на подзаголовок:

android:layout_alignParentLeft="true" 
android:layout_below="@+id/title" 
android:layout_toStartOf="@+id/date" 

Таким образом, у вас есть в иерархии, в которой всего 3 вида. Вы также можете использовать фиксированную ширину для даты, чтобы все элементы были выровнены:

android:layout_width="@dimen/date_width" 
Смежные вопросы