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

Android 自訂通知佈局 Style 父樣式找不到?加上 @android:style/ 前綴

     編輯:程式設計綜合問答

錯誤訊息

error: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.StatusBar.EventContent.Title'.

原因

在 styles.xml 繼承系統樣式時,**必須加上 @android:style/ 前綴**,否則 aapt 會在專案資源中尋找而非系統資源。

修正代碼

<!-- res/values-v9/styles.xml -->
<resources>
    <style name="NotificationText" parent="@android:style/TextAppearance.StatusBar.EventContent" />
    <style name="NotificationTitle" parent="@android:style/TextAppearance.StatusBar.EventContent.Title" />
</resources>

完整結構範例

res/values/styles.xml          <!-- 基礎定義 -->
res/values-v9/styles.xml       <!-- API 9+ 覆寫繼承系統樣式 -->
res/values-v21/styles.xml      <!-- API 21+ Material Design 微調 -->

基礎定義(values/styles.xml)

<resources>
    <style name="NotificationTitle">
        <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
        <item name="android:textStyle">bold</item>
    </style>
    <style name="NotificationText">
        <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
    </style>
</resources>

關鍵原則

  1. 系統樣式引用格式:parent="@android:style/Widget.Material.Light.ActionBar"。
  2. 版本限定符:values-v9 表示 API Level 9 以上套用,低版本回退至 values。
  3. 屬性引用:?android:attr/textColorPrimaryInverse 隨主題自動適配深/淺色模式。

現代替代:NotificationCompat.Builder + setCustomContentView

使用 NotificationCompat 搭配 RemoteViews 可跨版本自訂通知佈局,無需處理系統樣式繼承問題:

RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
contentView.setTextViewText(R.id.title, "標題");
contentView.setTextViewText(R.id.text, "內容");

Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notify)
    .setCustomContentView(contentView)
    .build();

修正 @android:style/ 前綴即可解決編譯錯誤;長期建議遷移至 NotificationCompat + RemoteViews 統一管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved