Android调整LinearLayout和平铺背景的问题

时间:2011-07-12 17:17:37

标签: android background android-linearlayout resize autoresize

我有以下布局(这很复杂,但我必须把它全部放在一边);我有3个LinearLayouts,水平,平铺png作为背景:2必须放在屏幕的顶部,最后一个放在屏幕的底部。在我必须放置一个小部件库。

我希望3个LinearLayouts可以获取用于背景的png的高度(首先是2,但不是最后调整大小的那个),并且画廊会占用屏幕的剩余大小。

我无法理解为什么调整第三个LinearLayout的大小。

非常感谢您的帮助。我在代码后面放了两张图片来了解情况。

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

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

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
 => IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:background="@drawable/bg_title" 
        android:gravity="center_horizontal">

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/home_title"
            android:textColor="@color/white"
            android:gravity="center"
            android:textSize="20sp"/>
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_channel_title">
    <FrameLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/channels_frameLayout">

        <HorizontalScrollView 
            android:id="@+id/channel_scrollView" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">

            <LinearLayout 
                android:id="@+id/channel_layout" 
                android:layout_width="match_parent" 
                android:layout_height="match_parent" 
                android:orientation="horizontal">

            </LinearLayout>
        </HorizontalScrollView>

    </FrameLayout>
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE REMAINING HEIGHT OF THE SCREEN -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="vertical"
    android:id="@+id/description_frameLayout">
    <Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" 
    />
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL BE PLACED ON THE BOTTOM OF THE SCREEN 
AND TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS NOK, THE LAYOUT IS RESIZED IN HEIGHT -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_description"
    android:id="@+id/description_layout"
    android:gravity="bottom">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        android:gravity="left"
        android:id="@+id/texts">

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/orange"/>

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"/>

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        android:gravity="right"
        android:id="@+id/btns">

        <ImageButton
            android:id="@+id/info" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@null"
            android:src="@drawable/btn_info" />

        <ImageButton
            android:id="@+id/favorite" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@null" 
            android:src="@drawable/btn_favorite" />

    </LinearLayout>
</LinearLayout> 

Good Layout that should be obtained

Bad layout that is currently obtained

3 个答案:

答案 0 :(得分:0)

你放的所有地方 “android:layout_height =”0dp“”你有layout_weight =“1” 尝试: “机器人:layout_height =” WRAP_CONTENT “”

此外,您肯定会错过包含文件末尾图像按钮的布局中的android:layout_weight =“1”。

如果你的最后一个布局太大了,那是因为你的@ drawable / bg_description肯定有点大,这就是为什么如果你不想在图像按钮布局中放置android:layout_weight =“1”,只需减少你的可绘高度。

答案 1 :(得分:0)

好的,我尝试减少可绘制的高度;有用。 我不明白为什么。 上面的第一张图片来自Photoshop,我刚刚创建了一个工作区,其中包含我手机的大小,并在其中构建了我的组件,试图尊重一些宽高比。然后我只是拿起我的组件而不修改它们的大小,并在我的应用程序中将它们用作drawables。我期待在设备的屏幕上也能尊重宽高比。

它实际上是尊重两个第一个drawables(在顶部),但对于底部的那个我必须减少它...如果我这样做,它将在设备中工作,但在Photoshop中没有关系。

那又怎样?是否无法模拟我们的应用程序并在创建时使用图形组件?对我来说这很奇怪。

答案 2 :(得分:0)

我最终决定继续前进并找到另一种方法来解决我的问题。

现在一切都使用xml配置完成。

这是包含屏幕底部按钮的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_description"
    android:id="@+id/description_layout"
    >

这是bg_description.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#919191" />
    </shape>
</item>
<item android:top="1dp">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
            <gradient
                android:endColor="#525252"
                android:startColor="#1B1B1B"
                android:angle="90"/>
    </shape>
</item>

现在一切都很完美。背景很好地显示,渲染比png更好,并且不再调整问题。

平铺背景很好但是对于像这样的简单用例,我们必须通过xml配置考虑更好和最简单的解决方案。