2012-06-18 2 views
0

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

Вот мой код ...

<RelativeLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/speedLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:text="@string/speed" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <View 
     android:id="@+id/speedGraph" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="4dp" 
     android:layout_below="@+id/speedLbl" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@color/blueColour" /> 

    <TextView 
     android:id="@+id/distanceLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:layout_below="@+id/speedGraph" 
     android:text="@string/distance" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <View 
     android:id="@+id/distanceGraph" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/distanceLbl" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@color/blueColour" /> 

</RelativeLayout> 

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

Может ли кто-нибудь увидеть другое решение этой проблемы?

+0

Я не понимаю ваш вопрос, не могли бы вы его прояснить? – pawelzieba

+0

Я хочу, чтобы они были того же размера, но я не хочу устанавливать определенный размер, поскольку хочу заполнить весь экран по вертикали. Поэтому я не хочу использовать 40dp или какой-то другой размер, может быть, процент. – StuStirling

+0

@ DiscoS2 Итак, вы в основном хотите, чтобы каждая группа 'TextView' +' View' занимала половину родительской высоты RelativeLayout? – Luksprog

ответ

1

Вы можете избежать проблемы с двойными весами с помощью небольшого трюка. Вы можете установить пустой View в вертикальном центре родителя RelativeLayout и расположить две группы выше и ниже этого View, что-то вроде этого:

<RelativeLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:orientation="vertical" > 

    <View android:id="@+id/anchor" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_centerVertical="true/> 

    <TextView 
     android:id="@+id/speedLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:text="@string/speed" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <View 
     android:id="@+id/speedGraph" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="4dp" 
     android:layout_below="@id/speedLbl" 
     android:layout_above="@id/anchor" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@color/blueColour" /> 

    <TextView 
     android:id="@+id/distanceLbl" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:layout_below="@id/anchor" 
     android:text="@string/distance" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <View 
     android:id="@+id/distanceGraph" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/distanceLbl" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="4dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@color/blueColour" /> 

</RelativeLayout> 

Кроме того, вы должны использовать только @+id/... обозначения при первом заявить, что идентификатор , при следующем возникновении id вы должны использовать @id/....

+0

Большое спасибо за советы – StuStirling

+0

вы должны использовать «Космос» вместо «Просмотр как якорь», Space экономит больше памяти и ресурсов. – Alaa

0

Вы можете достичь размера динамического экрана с помощью layout_weight. Но перед этим вы просто попробуете layout_weight линейной компоновке и обеспечите соответствующие веса представлению и текстуру. Это почти решает вашу проблему. Не используйте Relative Layout с весом. вес не работает в относительной компоновке.

+0

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

+0

js lint показывает это предупреждение. Это не повлияет на вашу производительность. – Akilan