2014-09-04 3 views
1

Проблема в том, что при разных размерах экрана 2 ImageViews в коде ниже расположены в несколько разных положениях. Я понятия не имею, что это неправильно, теоретически все должно отображаться одинаково на всех экранах, becouse я использую layout_weights ...Несогласованные результаты при вложенности нескольких LinearLayouts

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/menu_play_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/bg_color" > 

    <!-- relative layout contains 2 nested LinearLayouts here --> 
    <RelativeLayout 
    android:id="@+id/game_result_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

     <!-- First LinearLayout --> 
     <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal" 
     android:weightSum="600"> 

     <View android:layout_weight="99" android:layout_width="match_parent" android:layout_height="0dp"/> 

     <ImageView 
     android:layout_width="wrap_content" 

     android:layout_height="0dp" 
     android:layout_weight="75" 
     android:contentDescription="@string/star_desc" 
     android:src="@drawable/victory"/> 

     <View android:layout_weight="257" android:layout_width="match_parent" android:layout_height="0dp"/> 

      <!-- Second LinearLayout --> 
      <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:weightSum="1024"> 

      <View android:layout_weight="538" android:layout_width="0dp" android:layout_height="match_parent"/> 

      <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="45" 
      android:contentDescription="@string/star_desc" 
      android:src="@drawable/star"/> 

      </LinearLayout> 
     </LinearLayout> 
    </RelativeLayout> 
</RelativeLayout> 

Однако, проблема возникает только после добавления второй вложенной LinearLayout. С помощью только первого LinearLayout, ImageView отображается в правой позиции на всех экранах. После вложенности второго LinearLayout, как показано выше, оба ImageViews слегка меняют свои позиции на разных экранах.

обновление: Решение, предоставленное Ben75, зафиксировало вертикальные несоответствия, но некоторые незначительные горизонтальные различия все еще остаются. Это обновленный второй (вложенный) LinearLayout код:

... 
<LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="40" 
      android:weightSum="1024"> 
... 

Вот красивый интерфейс на одном эмуляторе: enter image description here

И здесь являются горизонтальными несогласованностями на эмулятор с меньшим экраном:

enter image description here

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

ответ

2

В secong LinearLayout у вас есть:

android:layout_height="wrap_content" 

, но так как это вид ребенка из первых LinearLayout (который использует вес): он должен также использовать вес, и вы должны установить это android:layout_height="0dp"


Посмотрев на скриншоте, кажется, что желтая звезда немного мала (в высоту), и я предполагаю, что это из-за android:layout_height="wrap_content", поэтому постарайтесь установить la yout height to match parent:

<ImageView 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="45" 
     android:contentDescription="@string/star_desc" 
     android:src="@drawable/star"/> 
+0

Благодарим вас за ответ! Действительно, я сделал то, что вы предлагали, и это исправлено, но только вертикальные несоответствия. Горизонтальные различия все еще остаются. Вы видите больше проблем в моем коде? – Savail

+0

Различия не огромны, но примечательны, особенно потому, что я пытаюсь прикрыть 1 изображение другим размером того же размера. Может быть, это ошибка андроида, потому что я действительно не могу понять, что может быть неправильно? – Savail

+0

поставил скриншот то, что у вас сейчас есть, может помочь. – ben75

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