Android布局打破了9补丁背景

时间:2010-10-11 09:09:09

标签: android android-layout

我在更新背景以使用9补丁图像时遇到此问题。使用不同尺寸的相同图像在不同的屏幕上布局很好,但是当我将图像更改为9补丁时,它会神秘地打破整个布局。

之前的布局如下所示:

Original layout http://onik.org/android/layoutOk.png

更改为9-patch:

9-Patch image http://onik.org/android/layoutError.png

XML文件保持不变,只是改变了PNG文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg">

    <TextView 
        android:text="@string/title"
        android:id="@+id/login_title"
        android:layout_width="fill_parent"
        android:layout_height="40px"
        android:textSize="30px">
    </TextView>

    <View
        android:id="@+id/login_underline"
        android:layout_width="wrap_content"
        android:layout_height="2px"
        android:background="#aaaaaa">
    </View>

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:stretchColumns="1"
        android:gravity="center"
        android:paddingLeft="10px"
        android:paddingRight="10px">

        <TableRow>
            <TextView
                android:id="@+id/login_usernameLabel"
                android:text="@string/login_usernameLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="5px">
            </TextView>

            <EditText
                android:text=""
                android:id="@+id/login_username"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:inputType="textEmailAddress"
                android:lines="1"
                android:nextFocusDown="@+id/login_password">
            </EditText>

        </TableRow>

        <TableRow>

            <TextView
                android:id="@+id/login_passwordLabel"
                android:text="@string/login_passwordLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </TextView>

            <EditText
                android:text=""
                android:id="@+id/login_password"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:nextFocusDown="@+id/login_login"
                android:inputType="textPassword">
            </EditText>

        </TableRow>

        <TableRow android:gravity="right">

            <Button
                android:text="@string/login_login"
                android:id="@+id/login_login"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
            </Button>   


     </TableRow>

        <TableRow>

            <CheckBox
                android:id="@+id/login_remember"
                android:text="@string/login_remember"
                android:layout_span="2">
            </CheckBox>

        </TableRow>

 </TableLayout>


</LinearLayout>

有什么想法吗?或其他解决方案,以获得非缩放,居中的背景?

3 个答案:

答案 0 :(得分:100)

这意味着只需添加属性

android:padding="0dip"

到你的布局标签

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg"
    android:padding="0dip">

更新

Android Docs有确切的解释:

“您还可以通过在右侧和底部线条上绘制一条线来定义图像的可选可绘制部分(实际上是填充线)。如果View对象将NinePatch设置为其背景,然后指定View的文本,它将自行伸展,以便所有文本仅适合由右侧和底部线指定的区域(如果包含)。如果未包含填充线,Android将使用左侧和顶部线来定义此可绘制区域。

要忽略此默认行为,我们需要在XML布局中显式设置填充属性

答案 1 :(得分:3)

解决了这个问题,9补丁上的填充区域不合适。当我将填充区域绘制为可伸展区域的反转时,图像开始工作。我只是觉得如果没有填充区域,这将是自动的:)

答案 2 :(得分:1)

使用9-patch设置内容行(右侧和底部)!