Android的布局与9补丁背景打破

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

以前的布局看起来像这样:

原始布局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> 

有任何想法吗? 还是其他解决scheme来获得非缩放,居中的背景?

这意味着只需添加属性

 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文档有确切的解释:

“你也可以通过在右边和底部画一条线来定义图像的可选的可绘制部分(有效的填充线),如果一个View对象设置NinePatch作为背景,然后指定View的文本,它将会伸展使得所有的文本只在右边和底部所指定的区域内(如果包含的话)适合的, 如果不包含填充线,Android使用左边和上边的线来定义这个可绘制的区域。

要忽略这个默认行为,我们需要在XML布局中显式地设置padding属性

解决了这个问题,9贴片上的填充区不适合。 当我画了填充区域作为可拉伸区域的反面时,图像开始工作。 我只是认为如果没有填充区域,这将是自动的:)

使用9-patch设置内容行(右下angular)!