解謎:爲什麼用了9-Patch背景圖後自帶Padding屬性?

本次分享的主題源於筆者在實際開發中遇到的問題。
具體現象爲:當普通的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

相關文章
相關標籤/搜索