首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android TextView 自適應背景圖:wrap_content 配合 .9 圖實現氣泡效果

     編輯:程式設計疑難解答

需求分析

  • TextView 尺寸隨文字內容變化 (wrap_content)。
  • 背景圖需精確貼合 View 實際大小,不拉伸變形,類似微信聊天氣泡。

核心解決方案

  1. 佈局屬性:android:layout_width="wrap_content"、android:layout_height="wrap_content"。
  2. 限制最大寬度:防止長文字單行過長,可用 android:maxWidth 或父佈局約束。
  3. 關鍵:使用 .9.png (NinePatch) 圖片:
    • 定義可拉伸區域 (左/上邊緣黑線) 與內容區域 (右/下邊緣黑線)。
    • 邊框、圓角、尖角等裝飾保持固定尺寸,中間透明區域隨內容拉伸。
    • Android Studio 右鍵圖片 → Create 9-patch file 可視化編輯。
  4. 設定背景:android:background="@drawable/bubble_bg" (引用 .9 圖)。

XML 範例

<TextView
    android:id="@+id/tv_msg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxWidth="250dp"
    android:padding="12dp"
    android:background="@drawable/bubble_received_9"
    android:textColor="#000"
    android:textSize="16sp" />

常見坑點

  • 直接用普通 PNG 設 background:圖片原始尺寸決定 View 大小,或被強制拉伸變形。
  • .9 圖標記錯誤:可拉伸區域未包含透明內容區,導致內容區也被拉伸 (文字變形)。
  • 未設 padding:文字貼邊,視覺擁擠;.9 圖內容區定義需大於 padding 區域。

進階:動態載入 .9 圖

Drawable d = ContextCompat.getDrawable(context, R.drawable.bubble_9);
textView.setBackground(d); // 確保 Drawable 是 NinePatchDrawable
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved