RelativeLayout不服从父级大小(使用layout_weight)

时间:2014-02-16 23:29:12

标签: android android-layout layout relativelayout

我无法在StackOverflow上找到类似的问题 - 基本上,我有一个简单的XML布局,其中有一个垂直的LinerLayout,它使用layout_weight进行10/50/40分割,是我想要的(如下所示):

<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>

但是 - 我想要覆盖Horizo​​ntalScrollView和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分割)中断并突然显示现在包含RelativeLayout的LinearLayout几乎占据了预览中的所有屏幕。

任何人都遇到过这个问题或者知道一个好的解决方法吗?我也尝试直接用RelativeLayout替换LinearLayout,我遇到了同样的问题。

编辑:进一步研究这个问题,似乎还有更多内容。正如我在下面评论的那样,我能够通过在TextViews周围包装LinearLayouts来解决这个问题,尽管我不确定为什么会这样。更新我的SDK和插件没有帮助(虽然我确实需要这样做....)

随着我的任务进一步发展,我遇到了第二个问题 - 我正在实施重叠的ScrollView&amp;的第二个版本。 ImageView(使用Karsten建议的FrameLayout完成)但layout_weight问题重新开始。

测试各种安排,似乎问题与我正在使用的图像非常相关,其分辨率非常大。用较小的图像替换它们可以解决问题 - 看起来在ImageViews中使用大图像或者作为LinearLayouts的背景会破坏整个屏幕的布局。

编辑#2:我实际上已经将XML加载到两个不同的设备上,它完全按照它应该呈现......这似乎是Eclipse XML布局查看器的一个错误?

(请原谅可怜的XML格式 - Eclipse Android xml编辑器在这方面令人沮丧......)

1 个答案:

答案 0 :(得分:0)

您发布的XML在Eclipse预览中对我来说很好。您是否在运行最新版本的Android插件?

请注意,您可以使用单个FrameLayout替换中间的LinearLayout和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: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>