2015年3月28日土曜日

[Android] LayoutInflaterを使って他のアクティビティのViewにアクセスする

LayoutInflaterを使うことで他のアクティビティのViewにアクセスできます(もちろん自分自身のActivity内で複数のレイアウト(XML)を使うこともできます)。

MainActivityとSubActivityの二つのアクティビティがあるとします。ここでMainActivityが使用するレイアウト(XML)をR.layout.main.xml、SubActivityで使用するレイアウト(XML)をR.layout.sub.xmlとします。それぞれのXMLを示します。
main.xml
sub.xml
ここで、SubActivityからR.layout.main.xmlのTextView(R.id.main)にアクセスするにはLayoutInflaterを使って次のようにします。
この方法を活用すると、この例のように他のアクティビティのViewにアクセスするだけでなく、ボタン押下のタイミングで異なるレイアウトを切り替えたり、ヘッダ、フッタのような共通レイアウトの使用を行うことができます。

2015年3月27日金曜日

[Android] AdMobを実装して広告を表示する

AdMob(https://apps.admob.com/)のアカウント登録、アプリ登録、広告定義は終えているものとします。

また、アプリのプロジェクトにgoogle-play-servicesが既に組み込まれているものとします。

ここまでの詳しい手順は、
がとても参考になります。

ここまでの条件が整っているという過程のもと、Activityに広告を表示するには対象ActivityのonCreate内で以下のようにします。

テストモードでの広告表示に必要な、ハッシュ化された端末IDの取得は
 [Android] AdMob テストで使う、デバイスIDを取得
のエントリーに書かれている方法を使うと、デバイス切り替えごとにIDを書き換えずに済んで素敵です。

2015年3月24日火曜日

[Android] ImageViewに設定されている画像を切り替える

状態を二つだけ持つ(画像の)ボタンであればToggleButtonを使えばよいのですが、3つ以上の状態を持ち、さらにその時に設定されている画像の状態に応じて処理や画像を切り替える場合、ToggleButtonでは対応できないので、次のようにします。

Preferencesを使ってステータス管理する方法もありますが、この方法の方が状態の情報が二重化しませんし、直感的なのでより良いと私は考えます。

2015年3月14日土曜日

[Android] [Java] 親クラスのクラス名を得る

extendsで親クラス名を書いていますので、それを再び書けばいいのですが、DRYじゃなくなるので以下の書き方を使っています。

2015年3月12日木曜日

[Android] R.string.*から文字列(String)を取得する

XML内では@string/somekeyのように書くことでres/values/strings.xmlに定義した文字列(下例参照)を得られます。



しかし、Javaコードの中では単純にR.string.somekeyはint値であるため、そのままでは指定した文字列を得られません。getResources().getString(int)を使います。