2013-10-09 38 views
1

我的一个DialogFragments实现了两个相同大小的GridView,一个堆叠在另一个之上。理想情况下,我的布局是这样的(如Android Studio中看到的): The layout as seen in Android Studio如何创建堆叠GridView的50/50垂直布局?

不幸的是,当我实际的Android设备上加载的布局,我得到的是这样的: The same layout on Android

汉字 GridView是空的,它是完全不可见的。此外,其高度根据要显示的元素数量而变化。我怎么能强制底部的GridView按照在Android Studio中看到的布局填充高度的50%,即使它是空的?

下面是这个特定的布局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

没有骰子,我试过了,如果子GridView中没有任何东西,底部的LinearLayout仍会消失。无论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