世界を目指せ!Androidアプリ開発入門

第6回 ユーザインターフェースの使い方:その1

この記事を読むのに必要な時間:およそ 3.5 分

前回のおさらい

前回は,複数のアクティビティの取り扱いとインテントに関して学びました。

具体的には,

  • 画面リソースの作成方法
  • アクティビティ間(主画面から副画面)の遷移方法
  • AndroidManifest.xmlの記述方法
  • アクティビティ間のデータ引渡し方法

といった説明をしました。

今回から2回にわたり,Android OSのユーザインターフェースのパーツ(以下,コントロールとします)の使い方をご説明します。

1回目は,

  • アプリタイトルの変更方法
  • 文字列リソースの管理方法
  • アプリアイコンの設定方法
  • メニューの追加とハンドリング方法

についてご説明します。

前回のアプリは,主画面の[Back]ボタンを押すと副画面に遷移し,エミュレーターのバックボタンを押すと主画面へ戻る動きをしましたが,今回は,これらをメニュー操作で行うように動作を変更します。それでは,前回のサンプルアプリに作り込みを行っていきます。

アプリタイトルの変更方法

まずは,アプリタイトルを変更してみます。

AndroidManifest.xmlの[Application Attributes][Label]に文字列リソースを指定することでタイトルを表示することができますが,今回のサンプルでは,主画面と副画面があるので,それぞれの画面でタイトルを変更してみます。

アプリタイトルを設定は,主画面・副画面のonCeateに以下を追加します。

// タイトルを表示する
setTitle( "この画面は主画面です" );

setTitleの第一引数がタイトルに表示したい文字列となります。

例では,主画面のタイトルを設定していますが,副画面では「この画面は副画面です」としてください。タイトルは,直接ソースコードに書いても動作に支障はありませんが,アプリを多言語対応するために,ソースコードから文字列を切り離し,リソースとして管理します。

文字列リソースは,プロジェクト内の以下に保存されています。

多言語に対応していないアプリは,端末のロケール設定に関わらず,以下の文字リソースが使われます。

res/values/strings.xml

アプリを日本語とそれ以外の言語(英語)に対応させる場合は,以下のように文字列リソースを用意します。

  • 日本語: res/values-ja/strings.xml
  • 英語: res/values/strings.xml

端末のロケール設定が日本語であれば「res/values-ja/strings.xml」が使われ,それ以外のロケール設定であれば「res/values/strings.xml」が使われます。それ以外の言語は,端末が多く使われている英語圏をターゲットにするのが無難なので,英語メッセージを用意しておきます。

それぞれのstrings.xmlは,以下のように記述します。

// 日本語用の文字リソース:res/values-ja/strings.xml
	title_main="主アクティビティ"
	title_sub="副アクティビティ"

// 英語用の文字リソース:res/values/strings.xml
	title_main="Main Activity"
	title_sub="Sub Activity"

=の左は,ソースコードから参照するID,右がIDに紐付く文字列になります。それぞれのファイルで,同じIDを使っているところがポイントです。IDは,それが何処で使われているのか判断できるように,title_と最初に付けます。

たとえば,ボタンなどのキャプションであればcapt_,メニューのタイトルであれば,menu_といった具合です。 リソースエディタで編集すると画面1のような感じです。

リリースエディタでの編集画面

画像

文字列リソースを使ってタイトルを設定するのには,以下のコードになります。

主画面:

// 主画面のタイトルを表示する
setTitle( R.string.title_main );

副画面:

// 副画面のタイトルを表示する
setTitle( R.string.title_sub );

setTitleの第一引数には,文字列ではなく先で作成した文字列リソースのIDを指定することで,文字列リソースを参照できます。文字列リソースは,R.string.xxx」のように指定します。

著者プロフィール

傍島康雄(そばじまやすお)

5月30日生まれ。

モバイルデバイスが大好物。それで動くアプリの開発に喜びを感じている。スマートフォン前夜のWindows Mobile,PalmOSのアプリに情熱を傾けていたが,最近は停滞気味でコードを書くよりも文章を書く機会が多くなっており,文章を書くのも,プログラミングと同じくらい奥深い作業だと感じている。

ブログ:http://yasuos.com/blog/

コメント

  • Re:

    #2さんのコメント助かりました。
    ありがとうございます。

    Commented : #8  onPrepareOptionsMenu (2012/04/19, 15:42)

  • 直りました

    SkeletonActivity.java に onOptionsItemSelected を実装した時点で #6 の事象が起きていたのですが、SkeletonSubActivity.java にも実装したところ、エラーはなくなりました。

    R.java にも menu_goto の id クラスが追加されました。

    Commented : #7  #6です (2012/03/26, 10:56)

  • R.javaにidが反映されません

    mainmenu.xml、submenu.xml に、それぞれ
    @+id/menu_goto
    を定義したのですが、
    R.javaの id クラスになぜかそれらが反映されません。

    それにより、ソース中の
    「case R.id.menu_goto:」の箇所で
    怒られます。

    なお、コンソール上に
    W/ResourceType( 1124): Bad XML block: header size 85 or total size 0 is larger than data size 0
    W/ResourceType( 1124): Bad XML block: header size 85 or total size 0 is larger than data size 0
    C:\eclipse\workspace\SkeletonApp\res\menu\mainmenu.xml:3: エラー: エラー: No resource found that matches the given name (at 'title' with value '@string/menu_gotosub').
    C:\eclipse\workspace\SkeletonApp\res\menu\submenu.xml:3: エラー: エラー: No resource found that matches the given name (at 'title' with value '@string/menu_gotosub').
    が表示されています。

    解消方法についてご教授お願いします。m(_ _)m

    Commented : #6  超初心者 (2012/03/23, 17:16)

  • 分かりませんでした

    #1#2さんのコメントを見るまで、何がなんだか分かりませんでした。
    書いてある通りにやっても動かないので、だめもとで、環境の再インストールを2回もしてしまいました。
    本文の修正は手間がかかるのかもしれませんが、下のコメントを参照して下さい程度は書いておいてほしいです。

    Commented : #5  初心者 (2011/10/31, 17:47)

  • 同感

    このサイトをとても参考にさせて頂いています。
    しかし、ソース内に前回とのつながりが一部なくなっているのが残念でした。
    下記コメントの「NULL避け」「menuについても」

    前回から難易度が上がった為このコメント欄を見るまで時間がかかってしまいました。

    今後のアプリ制作初心者の方の為にも訂正をお願い致します!!

    Commented : #4  アプリ制作初心者 (2011/07/25, 01:05)

1ページ(1/2)    

コメントの記入