2013-10-09 2 views
1

Один из моих DialogFragments реализует два GridViews равного размера, один из которых уложен поверх другого. В идеале, мой макет будет выглядеть следующим образом (как показано в Android Studio): The layout as seen in Android StudioКак создать вертикальную компоновку 50/50 со сложными GridViews?

К сожалению, когда я загрузить макет на реальном устройстве Android, я получаю что-то вроде этого: The same layout on Android

Когда Kanji GridView пуст, он совершенно невидим. Кроме того, его высота варьируется в зависимости от количества элементов, которые она должна отображать. Как заставить нижний GridView заполнить 50% высоты в соответствии с макетом в Studio Studio, даже когда он пуст?

Вот XML для данного макета:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/kanji_lookup_root" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:focusableInTouchMode="true"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <ProgressBar 
      android:layout_width="32dp" 
      android:layout_height="32dp" 
      android:id="@+id/progress_bar" 
      android:layout_toStartOf="@+id/search_box_kanji" 
      android:visibility="gone" 
      android:indeterminate="true" 
      android:layout_centerVertical="true"/> 

     <SearchView 
      android:layout_width="300dp" 
      android:layout_height="wrap_content" 
      android:id="@id/search_box_kanji" 
      android:queryHint="@string/menu_search_hint" 
      android:iconifiedByDefault="false" 
      android:layout_centerHorizontal="true"/> 

    </RelativeLayout> 

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

     <TextView 
      style="@style/EntryDetailsHeader" 
      android:text="@string/components" /> 

     <com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView 
      android:id="@+id/grid_components" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:numColumns="9"/> 

    </LinearLayout> 

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

     <TextView 
      style="@style/EntryDetailsHeader" 
      android:text="@string/kanji" /> 

     <GridView 
      android:id="@+id/grid_kanji" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:numColumns="9"/> 

    </LinearLayout> 

</LinearLayout> 

(Кстати, я использую StickyGridHeaders library для верхней компоненты GridView)

ответ

0

изменить '0dp' layout_height на вашем два LinearLayouts - «match_parent».

+0

Нет кубиков, я пробовал это, а нижнее LinearLayout все еще исчезает, если в дочернем GridView ничего нет. Я просто хочу, чтобы он заполнил свое назначенное место независимо от количества элементов в GridView. : \ – IAmKale

0

Вы упускаете атрибут weightSum на вашем наружном LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/kanji_lookup_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:focusableInTouchMode="true" 
    android:orientation="vertical" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:weightSum="2" > <!-- This line is what you were missing --> 
    ... 
</LinearLayout> 

Испытано это как работает на устройстве (если ваш стиль EntryDetailsHeader устанавливает match_parent ширину и высоту wrap_content).

+0

Это тоже не сработало, я не вижу никаких улучшений. – IAmKale

+0

Это то, что я вижу, с вашим кодом + модификация weightSum: http://i.imgur.com/01niMY6.png –

+0

Итак, чтобы сделать вещи еще более запутанными, макет отлично работает, если я пересажу код от моего DialogFragment до новой FragmentActivity. Это потенциально указывает на ошибку в классе Fragment (и его производных), которая предотвращает уважение веса на этом втором GridView. – IAmKale

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