Android Studio を 4.1 にバージョンアップしたらエラーメッセージが表示されてしまいました。

AAPT: error: expected reference but got (raw string) " #000000 "

ググってみたところ、styles.xml の中ではカラーコードを直接指定することはできなくて、colors.xml の中で定義されている名前を参照する指定をする必要があるようですので、早速修正してみます。

修正前:<item name="android:background">#000000</item>
修正後:<item name="android:background">@color/black</item>

colors.xml に @color/black が定義されていない場合は追加します。

<color name="black">#000000</color>

ビルドしてみると、再びエラーメッセージが表示されました。

AAPT: error: expected reference but got (styled string) " @color/black "

参照で指定すべし、と言われたので参照で指定したのですがダメでした。何か他に問題があるのかもしれません。

以前、この場所では識別子が二重定義されているというエラーメッセージが表示されたことがあり、二重定義を念頭にソースコードを見直しました。すると、以下のような構成になっていました。

<!-- 画面のテーマ -->
<style name="window1" parent="@android:style/Theme.Light">
  ...
  <item name="android:windowTitleBackgroundStyle">
    <style name="titleBackground">
      <item name="android:background">@color/black</item>
    </style>
  </item>
  ...
</style>

~~~~~~~~~~~~~~

<!-- ポップアップ画面 -->
<style name="window_popup" parent="android:style/Theme.Translucent">
  ...
  <item name="android:windowTitleBackgroundStyle">
    <style name="titleBackground">
      <item name="android:background">@color/black</item>
    </style>
  </item>
  ...
</style>  

異なる画面の定義ではあるのですが、同じ名前のスタイルを指定している箇所がありました。そこで、2回登場している titleBackground を切り出して独立したスタイルにし、該当箇所では参照として呼び出すように修正しました。

<!-- 共通で使用する設定 -->
<style name="titleBackground">
  <item name="android:background">@color/black</item>
</style>

<!-- 画面のテーマ -->
<style name="window1" parent="@android:style/Theme.Light">
  ...
  <item name="android:windowTitleBackgroundStyle">@style/titleBackground</item>
...
</style>

~~~~~~~~~~~~~~

<!-- ポップアップ画面 -->
<style name="window_popup" parent="android:style/Theme.Translucent">
  ...
  <item name="android:windowTitleBackgroundStyle">@style/titleBackground</item>
  ...
</style>

これでビルドしたところ、エラーメッセージは表示されなくなりました。

ここまできてようやく分かったのですが、エラーメッセージで (styled string) と記載されていたのは、参照の代わりにスタイル <style>~</style> が直接指定されていた、という意味だったようです。


0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください