2014-02-16 2 views
0

Мне не удалось найти аналогичную проблему с тем, что у меня есть на StackOverflow - в основном, у меня простой XML-макет с вертикальным LinerLayout, который использует layout_weight сделать 10/50/40 раскол, который является то, что я хочу (как показано ниже):RelativeLayout не подчиняется размеру родителя (с layout_weight)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"  
android:gravity="left" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight=".1"   
    android:text="@string/title" 
    android:textColor="@color/black" 
    android:textStyle="bold" /> 

     <LinearLayout  
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".5"  
     android:orientation="vertical" 
     android:background="@color/green"> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="top" 
     android:fillViewport="true"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" /> 

    </HorizontalScrollView> 

    <ImageView 
     android:id="@+id/preview_bg" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/level_preview_back" 
     android:focusable="false" /> 

</LinearLayout> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight=".4"   
    android:text="@string/title" 
    android:textColor="@color/black" 
    android:textStyle="bold" /> 

</LinearLayout> 

НО - Я хочу HorizontalScrollView и ImageView быть наложены (т.е. взять точно такое же место на на верхняя часть другой), поэтому я вставляю RelativeLayout как таковой:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"  
android:gravity="left" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight=".1"   
    android:text="@string/title" 
    android:textColor="@color/black" 
    android:textStyle="bold" /> 

     <LinearLayout  
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".5"  
     android:orientation="vertical" 
     android:background="@color/green"> 

     <RelativeLayout     
      android:layout_width="match_parent"   
      android:layout_height="match_parent"> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="top" 
     android:fillViewport="true"> 

     <LinearLayout 
       android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" /> 

    </HorizontalScrollView> 

    <ImageView 
     android:id="@+id/preview_bg" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/level_preview_back" 
     android:focusable="false" /> 

    </RelativeLayout> 

</LinearLayout> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight=".4"   
    android:text="@string/title" 
    android:textColor="@color/black" 
    android:textStyle="bold" /> 

</LinearLayout> 

Но когда я сделайте это, layout_weight (10/50/40 split) сломается и одурманен LinearLayout, который теперь содержит RelativeLayout, занимает практически весь экран в превью.

Кто-нибудь испытал эту проблему или знал хорошее обходное решение? Я также попытался заменить LinearLayout на RelativeLayout напрямую, и у меня такая же проблема.

EDIT: Дальнейшее изучение этой проблемы, похоже, больше. Как я уже говорил ниже, мне удалось обойти эту проблему, обернув LinearLayouts вокруг TextViews, хотя я не уверен, почему это сработало. Обновление моего SDK и плагина не помогло (хотя мне это и нужно было делать ...)

Перемещение дальше вместе с моей задачей, я ударил вторую проблему - я реализовал вторую версию перекрытого ScrollView & ImageView (которые были сделаны с помощью FrameLayout, как было предложено Карстеном), но проблемы с макетами начались заново.

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

EDIT # 2: Я действительно загрузил XML на два разных устройства, и он отображает точно так, как должен .... Это, кажется, ошибка с помощью средства просмотра XML Eclipse XML?

(Пожалуйста, простите бедную XML форматирование - XML ​​редактор Затмение Android расстраивает в этой связи ...)

ответ

0

XML, Вы разместили отлично работает для меня в предварительном просмотре Eclipse. Вы используете последнюю версию Android-плагина?

Обратите внимание, что вы можете заменить средний LinearLayout и RelativeLayout с одним FrameLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="left" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight=".1" 
     android:text="string/title" 
     android:textStyle="bold" /> 

    <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight=".5" 
     android:background="#00ff00" > 

     <HorizontalScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="top" 
      android:fillViewport="true" > 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" /> 
     </HorizontalScrollView> 

     <ImageView 
      android:id="@+id/preview_bg" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#ff0000" 
      android:focusable="false" /> 
    </FrameLayout> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight=".4" 
     android:text="string/title2" 
     android:textStyle="bold" /> 

</LinearLayout> 
+0

Хм .. Спасибо за ответ. Я действительно вернулся сюда, чтобы опубликовать свой собственный ответ - похоже, если я завершу TextViews в их собственные LinearLayouts и применил layout_weight к LinearLayouts, а не непосредственно к TextViews, тогда он отобразится правильно. Я также проверю, чтобы убедиться, что мой Eclipse обновлен. – Squimon

+0

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

Смежные вопросы