2013-11-11 4 views
0

У меня есть этот макет: во-первых, это прядильщик, после которого есть список, после этого в линейном режиме включаются EditText и Button, а внизу экрана - кнопка.RelativeLayout: другой результат при изменении относительно вида

Вот мой первый файл макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="vertical"> 

    <Spinner 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:textColor="#0e0e0e" 
     android:layout_above="@+id/list_view" 
     android:id="@+id/spinner"/> 

    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/list_view" 
     android:layout_alignParentLeft="true" 
     android:layout_above="@+id/linear_layout" /> 


    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/linear_layout" 
     android:layout_above="@+id/search_btn" 
     android:weightSum="3" 
     android:layout_alignParentLeft="true"> 

     <EditText 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/insert_chord_edit_text" 
      android:layout_weight="2" 
      android:text=""/> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/add_chord_button" 
      android:layout_weight="1" 
      android:text="Add"/> 

    </LinearLayout> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/search_btn" 
     android:text="Search" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="32dp" /> 

</RelativeLayout> 

Все работает отлично, за исключением того, что я не могу видеть Spinner. (и я тестировал на реальном устройстве). после этого, я меняю макет выше. Вместо того, чтобы сказать: spinner is above listview и listview is above of linearlayout. Я перехожу к: listview is below of spinner и listview is above of linearlayout. У меня есть следующие изменения:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:orientation="vertical"> 

    <Spinner 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:textColor="#0e0e0e" 
     android:id="@+id/spinner"/> 

    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/list_view" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/spinner"  // ADD THIS LINE 
     android:layout_above="@+id/linear_layout" /> 


    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/linear_layout" 
     android:layout_above="@+id/search_btn" 
     android:weightSum="3" 
     android:layout_alignParentLeft="true"> 

     <EditText 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/insert_chord_edit_text" 
      android:layout_weight="2" 
      android:text=""/> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/add_chord_button" 
      android:layout_weight="1" 
      android:text="Add"/> 

    </LinearLayout> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/search_btn" 
     android:text="Search" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="32dp" /> 

</RelativeLayout> 

И он работает так, как я хочу, но я не могу объяснить, почему. Пожалуйста, скажите мне.

Спасибо :)

ответ

1

В первом случае ваш ListView был упомянут в качестве заполняющего высоты родителя и имеет layout_above атрибута, но не layout_below атрибута. Таким образом, listview занимал всю высоту над элементом linear_layout. Вот почему вы не можете увидеть spinner.as видимость прядильщика переопределяется listview.

+0

так что если атрибут А, объявляющий после того, как атрибут B переопределит атрибут B, правильно? и это работает для всех видов макета? благодаря :) – hqt

0

комплект layout_weight="1" для вашего Spinner может решить вашу проблему.

1
// try this 
<?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:padding="5dp" 
    android:orientation="vertical" > 

    <Spinner 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:textColor="#0e0e0e" 
     android:id="@+id/spinner"/> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:id="@+id/list_view"/> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_marginTop="5dp" 
     android:id="@+id/linear_layout"> 

     <EditText 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/insert_chord_edit_text" 
      android:layout_weight="2" 
      android:text=""/> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/add_chord_button" 
      android:layout_weight="1" 
      android:text="Add"/> 

    </LinearLayout> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/search_btn" 
     android:text="Search" 
     android:layout_marginBottom="5dp" 
     android:layout_marginTop="5dp"/> 
</LinearLayout> 
Смежные вопросы