2012年11月1日木曜日

androidのアプリケーション名の落とし穴

「アプリケーション名がStrings.xmlのapp_nameで出てこない」
こんなことを言われたのが先日.

「そんなんManifestの<application>にandroid:labelタグで設定されてるやん」
とか調子こいていたのもつかの間


「app_nameが出てこない…( ゚д゚ )」



ということで今回のお題

ランチャーに表示するアプリケーション名の設定場所


結論から言うと原因はManifestの<intent-filter>
ただしこいつは悪さをしていたわけではなく, むしろ一生懸命仕事をした結果が原因らしい.

通常アプリを開いて最初に開きたいActivityには, Manifestにて

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>

    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>


と宣言するはず.
すると, この<intent-filter>, こいつがランチャーに表示する名前を探し出す.
問題はこの時, <application>へ探しに行ってくれれば良いのに,

まず自分
  ↓
無ければ自分を含むActivity

の順に探そうとする.
結果, 名前を指定してやらなかったことが災いして, Activityにつけた名前を
「これがアプリケーション名だ!+(゚∀゚ 0)*」
とうれしそうに表示するわけですよ.
それじゃない…それじゃないんだ…!

なので

<intent-filter
    android:label="@string/app_name">
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

といった形で, <intent-filter>のlabelで教えてやると, 望んだとおりのお仕事をしてくれます.





ちなみに  自分を含むActivity にすらlabelが無かった場合, 表示するのは
そのActivityのパッケージ名 + Activity名
…そりゃねぇよorz
<application>さん使ってやれよ…

11/19訂正: ちゃんと<application>から取ってきてくれるみたいですorz
もうやだこのIS03

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...