本次分享的主题源于笔者在实际开发中遇到的问题。
具体现象为:当普通的9-Patch图用做TextView的backGround属性后,整个TextView便有了必定的Padding值。但笔者并无给定padding属性,甚至在预览视图中,也没有展示出padding效果。但运行起来后,便莫名其妙地有了内边距。
咱们先来看布局代码:android
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" android:background="@mipmap/background" android:text="@string/app_name" tools:context=".MainActivity"> </TextView>
在Android Studio内的界面预览如图:
红色边框的图片即背景,是通过9-Patch处理过的.9.png文件。
显然,在预览时是正常没有内边距的,接下来咱们运行它。其效果以下图所示:
能够看到,实际运行时,内边距出现了。
通过一番问题排查,发现其根源在于.9.png文件,在Android Studio中打开这个图片,发现它的缩放设定是这样的:
app
可见,中央深粉色的部分就是自由拉伸的部分。定义它的,则是图片四周的黑色线条。
接着,咱们勾选“Show content”,即预览显示内容区,以下图所示:
布局
可见,内容仅显示在中央非空白区域,也就是咱们最终看到的运行效果了。
到此,问题的根源找到了,咱们怎么解决它呢?很简单,在进行图片拉伸定义时,咱们应使用上和左边缘进行划线定义,而右和下边缘则定义了内容可填充的区域。所以,作以下图所示的修改:
3d
分别仔细观察上侧和下侧,左侧和右侧边缘,能够看到上侧和下侧并不是彻底划线,而是定义了拉伸的部分;而下侧和右侧则是彻底划线,限定了内容可填充区域。
再次运行,可见内边距已消失。
code
固然,还有一种解决办法。即在xml布局文件中,将TextView的padding属性值强制写为0dp,内边距则也会为0。但笔者更推荐使用前一种方法,由于强制为0的方法,在当确实须要有padding值的时候,每每会不太好处理。
好了,以上就是本次分享给你们的开发小技巧,但愿可以对你有所帮助。xml