Android Studio 4.1 以降のバージョンをお使いの方はこちらをお読み下さい。
この講座の目次はこちら
4択クイズアプリの開発では Android Studio 3.1.4 を使用していましたが、Android Studio 3.6 以降では Warning がたくさん表示されるようになっているかと思います。
Warning はエラーとは違い「注意・お知らせ」のようなものです。そのままにしておいても、現在のところプログラム自体に影響はありませんが、コードがマーカーだらけだとあまり良い感じはしないですよね。
そこでこの記事では 4択クイズアプリの Warning の解消法を紹介していきます。先ほども書いたようにプログラム自体に影響は出ないので、気になる方だけ進めてみてください
目次
解説
activity_main.xml
まずはクイズを出題する画面 activity_main.xml にある Warning を消していきましょう。
activity_main.xml を開いてください。
TextView
はじめに TextView 要素に表示されている Warning を消していきます。
24 行目あたりにある「Question」と表示している TextView を見てください。
色が変わっている部分にカーソルを合わせてみると
と表示されます。
これは「ハードコードされている文字列 "Question" には @string リソースを使うべきです」という Warning です。
@string リソースは文字列を定義するために用意されている strings.xml ファイルのことです。ハードコードとは strings.xml を使わずに直接文字列を書いていることを指しています。
Warning のメッセージの通り strings.xml に文字列を定義していきましょう。
Android Studio 画面左側のプロジェクト構造から app → res → values → strings.xml を開きます。
strings.xml を開いたら、以下のように文字列を定義します。
name 属性にはこの文字列を呼び出す時に使う名前を指定して、<string></string> の間に定義する文字列を書きます。
文字列を定義したら activity_main.xml に戻って
を
に変更します。
@string/名前と書くことで、strings.xml に定義した文字列を呼び出すことができます。
Warning が消えたでしょうか?
次は 16 行目あたりにある「Q1」と表示している TextView です。
ここも先ほどの「Question」と同じ方法で Warning を消すことができますが、少しだけ書き方が変わります。
「Q1」の 1 の部分は第何問目かを表すので、クイズを出題するたびに更新します。このようにあとで数値を入れる部分には %d を使用します。
今回は数値なので %d ですが、文字列を入れる場合は %s を使用します。
activity_main.xml での書き方は同じで
と書きます。
strings.xml は何度も同じ文字列を使う時に役立ちます。
例えば5つのアクティビティの中に「Hello」と表示する TextView があったとします。
アプリを開発する途中で「Hello」を「こんにちは」に変えたくなった時に、strings.xml に定義しておけば strings.xml 内の1箇所を変更するだけで全てのアクティビティの TextView の文字列を変更することができます。
他にも翻訳ファイルを作成する時にも役立ちます。
参考:【Android Studio】アプリを翻訳・ローカライズする方法
Button
次は 32 行目あたりにある android:text="answer1" の Warning です。
これも TextView と同じように strings.xml から文字列を指定していないことが原因なので、同じ方法で消していきましょう。
strings.xml に文字列を定義します。
activity_main.xml の Button 要素の text を以下のように変更します。
この「answer」は一時的に表示しているだけの文字列なので、他のボタン answer2, answer3, answer4 も @string/btn_answer を使って同じように Warning を消して下さい。
avtiviry_result.xml
次は結果画面である activity_result.xml ファイルです。
ここに出ている Warning も全て strings.xml を使用していないことが原因なので、activity_main.xml と同じ手順で修正してください。
ポイントは「3 / 5」と「トータルスコア : 333」に %d を使うことです。
strings.xml のサンプル
<string name="result_score">%d / 5</string>
<string name="result_total_score">トータルスコア : %d</string>
<string name="btn_return">もどる</string>
MainActivity.java
次はクイズを出題する MainActivity.java ファイルです。
上から順番に Warning を消していきましょう。
33行目あたり
quizData の上にカーソルを合わせると C-style array declaration of field 'quizData' と表示されます。
これは「C言語のスタイルで配列が宣言されています」という Warning です。
Java のスタイルにするために、以下のように書き換えてください。
どちらの書き方でも良いですが、Java で開発しているので String[][] quizData を使用しましょう。
60行目あたり
for の上にカーソルをあわせると 'for' loop replaceable with enhanced 'for' と表示されます。
これは「for ループをより良い方法で書き換えることができます」という Warning です。
for の上でクリックすると、左側に豆電球のマークが出るのでクリックします。
Replace with enhanced 'for' をクリックします。
for ループが書き換わって Warning が消えたことが確認できると思います。
この書き方は「quizData 配列から要素を quizDatum という名前で一つずつ取り出す」という方法です。
今まで quizData[i] と書いていた部分が quizDatum にあたるので、都道府県名の取り出し方が
から
に変わっています。
どちらの書き方でも良いですが、プログラミング初心者の方は配列のイメージをつかみやすい for (int i = 0; i < quizData.length; i++) で書くことをオススメします。
配列の使い方に慣れてきたら for (String[] quizDatum : quizData) を使って、効率的なコードを書いていきましょう
82行目あたり
文字列の上にカーソルを合わせると Do not concatenate text displayed with setText. Use resource string with placeholders. と表示されます。
これは「文字列を連結しないで、string リソースでプレースホルダーを使ってください」という Warning です。
string リソースとは strings.xml ファイルのことで、プレースホルダーは strings.xml に定義した「Q%d」の %d のことです。
の %d の部分に、問題番号を入れて表示してみましょう。
countLabel.setText("Q" + quizCount); を以下のように書き換えてください。
getString メソッドを使って strings.xml に定義した文字列を取得します。文字列は R.string.名前 と書きます。
getString メソッドの第二引数には %d の部分に入れる数値を指定します。
ここで一度アプリを実行してみて下さい。
問題番号が Q1 → Q2 → Q3 と表示されるでしょうか?
ResultActivity.java
ResultActivity.java では、スコアラベルとトータルスコアラベルの2箇所に Warning が出ていますが、修正方法は MainActivity.java の「Q1」と同じです。
33 行目あたり
変更後:resultLabel.setText(getString(R.string.result_score, score));
34行目あたり
変更後:totalScoreLabel.setText(getString(R.string.result_total_score, totalScore));
まとめ
以上で全ての Warning を解決することができました。
はじめにも書いたように Warning がアプリの動作にすぐに影響することはないですが、全て解決しておくとコードがスッキリとして気持ちが良いですね。
Android Studio では Warning の横に表示される豆電球をクリックすれば解消法を丁寧に提案してくれます。今後他の Warning が表示された場合は、そちらを活用してみてください
サンプルコード
完成版のサンプルコードは GitHub からダウンロードできます。
GitHub:https://github.com/codeforfun-jp/quizapp
参考:GitHubからAndroid Studio プロジェクトをダウンロード・実行する方法
クイズアプリ開発講座の完全版について
もっとアプリ開発をしてみたい!自分のアプリをリリースしたい!という方のために、この講座の完全版をご用意しました。
完全版では
- SQLite Databaseを使ってのクイズ管理
- クイズカテゴリの選択
- 正解・不正解の効果音
- AdMob バナー・インタースティシャル広告
- Image Asset Studio(アイコン作成ツール)の使い方
などを実装していきます。
これらのコードはクイズアプリ以外にも利用できるコードばかりなので、今後アプリを開発していく時に必ず役立つと思います。
さらに3つの特典
- Google Play Games リーダーボード・実績の実装方法
- 画像を使ったクイズアプリの作り方
- 答えを入力するクイズアプリの作り方
もご用意しました。
全手順の動画付きで、アプリの開発から公開・アップデートまで出来る講座になっています。
初めてアプリを作るという方もぜひ挑戦してみてください

この講座では Android Studio で4択クイズアプリを開発しながら
- SQLite データベースの使い方
- カテゴリ別のクイズ出題
- AdMob 広告の実装
- Play ストアへのアプリの公開
- Google Play ゲームとの連携
を学ぶことができます。
アプリを開発するだけでなく、アプリをリリースして広告収入を得たいという方にオススメの講座です。