ゲームアプリ (Catch the Ball)

【Android Studio】ゲームアプリ開発入門 第13回「Warningの解消 -XML編-」

 
ここまでの記事はこちら
 

ゲームは完成しましたが、Android Studio 3.6 以降では Warning がたくさん表示されるようになっているかと思います。


 

Warning はエラーとは違って「注意・お知らせ」のようなものなので、そのままにしておいても現時点でプログラムに影響はありません。

しかしコードがマーカーだらけだとあまり良い感じはしないので、今回からは Warning の解消法を紹介していきます。

先ほども書いたようにプログラム自体に影響は出ないので、気になる方だけ進めてみてください
 

関連するファイル数が多いので xml ファイルと java ファイルの2回に分けて書いていきます。

今回は

  • activity_start.xml
  • activity_main.xml
  • activity_result.xml

の Warning を解消していきましょう。
 

java ファイル内の Warning の消し方は次の記事で紹介しています。
 


 

解説

activity_start.xml

まずはゲーム開始画面である activity_start.xml にあるWarning を消していきましょう。

activity_start.xml を開いてください。
 

TextView – text 属性

31 行目あたりにある「30 point」と表示している TextView を見てください。


 
 

色が変わっている部分にカーソルを合わせてみると

Hardcoded string "30 point", should use "@string" resource

と表示されます。


 
 

これは「ハードコードされている文字列 "30 point" には @string リソースを使うべきです」という Warning です。

@string リソースは、文字列を定義するために用意されている strings.xml ファイルのことです。

ハードコードとは、strings.xml を使わずに直接文字列を書いていることを指しています。
 
 

Warning のメッセージの通り strings.xml に文字列を定義していきましょう。
 

Step 1

Android Studio 画面左側のプロジェクト構造から app → res → values → strings.xml を開きます。


 
 

Step 2

strings.xml を開いたら、以下のように文字列を定義します。

<string name="point_pink">30 point</string>

name 属性にはこの文字列を呼び出す時に使う名前を指定して、<string></string> の間に定義する文字列を書きます。
 
 

Step 3

文字列を定義したら activity_start.xml に戻って

android:text="30 point"

android:text="@string/point_pink"

に変更します。

@string/名前と書くことで、strings.xml に定義した文字列を呼び出すことができます。
 
 
 

Warning が消えたでしょうか?


 
 

他の TextView の android:text=~ 部分にある Warning も同じ手順で消してください。
 
 

strings.xml はいつ役立つ?
strings.xml は何度も同じ文字列を使う時に役立ちます。
例えば5つのアクティビティの中に「Hello」と表示する TextView があったとします。
アプリを開発する途中で「Hello」を「こんにちは」に変えたくなった時に、strings.xml に定義しておけば strings.xml 内の1箇所を変更するだけで全てのアクティビティの TextView の文字列を変更することができます。
他にも翻訳ファイルを作成する時にも役立ちます。
参考:【Android Studio】アプリを翻訳・ローカライズする方法

 
 
 

TextView – paddingLeft 属性

次は 33行目あたりの paddingLeft についている Warning です。


 

この Warning は RTL Layout Support という API が追加されてから出るようになりました。

RTL は Right To Left(右から左)という意味で、アラビア語など右から左に読む言語に対応したものです。

解決法はいくつかありますが、このアプリでは特に対処する必要はないので Warning を無視する方法を紹介します。

その他の対処法については以下の記事を参考にしてください。
参考:【Android Studio】paddingLeft の Warning 解消法
 
 

対処法① 個別に設定する方法

paddingLeft の文字の上にカーソルを合わせると、左側に豆電球のアイコンが表示されるのでクリックします。


 

Suppress: Add ignore:tools="RtlHardcoded" attributeを選択します。


 

RtlHardcoded を ignore(無視する)コードが追加されました。


 

まだ Warning が残っているのでもう一度カーソルを合わせて豆電球のアイコンをクリックします。

Suppress: Add ignore:tools="RtlSymmetry" attribute を選択します。


 

先ほどの RtlHardcoded の後ろに RtlSymmetry が追加され Warning が消えました。


 
 
 

対処法② 一括指定する方法

他の TextView にある paddingLeft の Warning も同じように消すことができますが、何度も同じコードを書くのが面倒なこともあります。

その場合はルート要素である LinearLayout タグ内に書くこともできます。


 

先ほど追加された tools:ignore="RtlHardcoded,RtlSymmetry" をコピーして 10 行目あたりに貼り付けます。


 
 

全ての paddingLeft の Warning が消えていると思います。

このように同じ Warning が複数あって全て無視する場合は、一括指定する方法が便利です。
 
 
 

ImageView

次は 25 行目あたりにあるピンクボールの画像を表示している ImageView の Warning を消していきましょう。

この Warning の原因は contentDescription 属性がないことです。

contentDescription 属性は、ImageView に指定している画像が何を意味するのかを示すものです。一部の機種の読み上げ機能などで反映されるようで、目が不自由な方にも役立つ機能のようです。
 

この Warning を消す方法は

  1. contentDescription 属性を付ける
  2. Warning を無視する

の2つあります。
 

今回はゲームアプリであり、contentDescription 属性はあまり重要ではないので、Warning を無視する方法にします。

テキストコンテンツが多いアプリの場合などは contentDescription 属性の使用を検討することをお勧めします。contentDescription 属性の指定方法はこちらの記事を参考にしてください。
参考:【Android Studio】ImageView の Warning 解消法
 
 

対処法① 個別に設定する方法

色が変わっている部分にカーソルを合わせると、左側に豆電球のアイコンが表示されるのでクリックします。


 

Suppress: Add ignore:tools="contentDesciption" attribute を選択します。


 

contentDescription を ignore(無視する)コードが追加され、Warning が消えました。


 
 

対処法② 一括指定する方法

このコードも先ほどの paddingLeft と同じように、それぞれの ImageView に tools:ignore="ContentDescription" を指定するのではなく、ルート要素に一括指定することもできます。

10行目あたり RtlHardcoded,RtlSymmetry の後ろに ,(カンマ)区切りで ContentDescription を追加します。


 

これで LinearLayout 内にある全ての contentDescription の Warning を一括で無視することができます。
 
 
 

Button

次は 71 行目あたりにある android:text="START" の Warning です。

これも TextView と同じように strings.xml から文字列を指定していないことが原因なので、同じ方法で消していきましょう。
 

strings.xml に文字列を定義します。

<string name="btn_start">START</string>

 

activity_start.xml の Button 要素の text を以下のように変更します。

android:text="@string/btn_start"

 
 

activity_main.xml

次はゲーム画面である activity_main.xml ファイルです。

Warning は activity_start.xml とほとんど同じです。
 

まずは 8 行目あたりに paddingLeft と contentDescription の Warning を無視するコードを追加します。


 

28行目あたりの「タップしてスタート」の TextView は strings.xml に文字列を定義してください。


 
 

1つだけ異なるのが、スコアの文字列「Score : 300」の書き方です。

表示する文字列が決まっている TextView の場合は

<string name="score">Score : 300</string>

と書けば良いですが、スコアはボールをキャッチするたびに更新していくので、固定された文字列ではありません。
 
 

このように何の数値が入るかわからない部分には %d を使用します。

<string name="score">Score : %d</string>

今回は数値なので %d ですが、文字列を入れる場合は %s を使用します。
 
 

activity_main.xml での書き方は同じで

android:text="@string/score"

と書きます。

%d の部分に数値を入れる方法は、次回 MainActivity.java の Warning を消すときに紹介します。
 
 
 

activity_result.xml

最後は activity_result.xml の Warning です。

ここに出ている Warning は全て strings.xml を使用していないことが原因なので、今までと同じように修正してみてください。

ポイントは「スコア」と「ハイスコア」に %d を使うことです。
 
 
 

次に行うこと

以上で XML ファイルの Warning を全て消すことができました。
 

分からない箇所がある場合は、GitHub に完成版のコードを載せているのでご確認ください。
GitHub:https://github.com/codeforfun-jp/catch-the-ball-version1
参考:GitHubからAndroid Studio プロジェクトをダウンロード・実行する方法
 
 

次回は java ファイルの Warning を消していきましょう。

第14回 「Warningの解消 -java編-」に進む
 

 
 
 
Android Studioアプリ開発のメニューはこちら
 

ABOUT ME
Sara
「わかりやすく・シンプル」をモットーに、スマホアプリ・ウェブアプリの作り方を紹介します。 独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています🙂
guest
0 Comments
Inline Feedbacks
View all comments
0
この記事にコメントするx