ページ

2013/02/16

iOS UINavigationBarとステータスバーの高さを除いた画面サイズ

|
UINavigationBarの高さとステータスバーの高さを除いた、実際にコンテンツとして表示できる領域を取得する方法のメモです。 ViewControllerの中に書いています。
availableWidth, availableHeightがちゃんと取れているかどうか、確かめるために少し余白を加えて背景色をつけたUITextViewを表示してみました(iPhone4S)。

Android Fragmentを含む画面遷移のテスト方法(JUnit)

|
Androidの画面遷移の自動テストをする方法として、ActivityInstrumentationTestCase2を使うサンプルを紹介してくださっているブログなどは見かけるのですが、 Fragmentを使った場合のものが見つからなかったのでサンプルを作ってみました。

Fragmentインスタンスの取得方法

ActivityではActivityMonitor#getLastActivity()などでモニタしているActivityのインスタンスを取得できますが、 Fragmentのインスタンスを取得しようとすると、そういったテスト用のメソッドがなく FragmentManager#findFragmentByTag()などで取得するしかなさそうです。

Fragmentの画面遷移のチェック方法

Activityの場合はActivityMonitor#getHits()で呼び出されたかどうかを確認できますが、 Fragmentの場合で考えられるのは以下のようなものでしょうか。
・BackStackの数が期待通りに増減しているか
・findFragmentByTag()で取得できる(=前面にある)Fragmentが期待通りのクラスか

2013/01/12

Android 入力チェックライブラリ

|
Androidアプリ用の入力チェックのライブラリを作りました。
AndroidFormEnhancer

使い方ですが、まずアノテーションで入力フォームの仕様を定義します。
例えば、「名前」の入力欄を
  • 必須
  • 全角
  • 最大20文字
  • 画面上のリソースIDはR.id.textfield_name
  • エラーメッセージの項目名としてR.string.form_nameを使う
という場合は以下のような感じでクラスを作ります。

2013/01/11

Android Drawableのattrを定義

|
ライブラリなどを作る際、styleを使ってDrawableをカスタマイズ可能にするときの方法です。 ライブラリ側のattrs.xmlに属性を定義します。formatはreferenceで良いです。 styleableも定義します。 ライブラリ側のアイコンをロードする部分です。 利用アプリ側で、独自の画像を指定するスタイルを定義します。(styles.xmlなど) 利用アプリ側で、スタイルを適用します。(AndroidManifest.xml) 以上です。 注意しなければいけないのは、アイコンをロードする部分で mContextと書いているContextはActivityのテーマが適用されているものでなければならない点です。 Activityそのものなら有効ですが、Activity#getBaseContext()をContextとして使ってしまうと、適用されているテーマが取得できません。 (他にも有効なものがあるかもしれません。)

2013/01/03

GitHub pushすると「Permission denied (publickey)」

|
先日、GitHubにpushしようとしたところで と表示されてしまいました。
原因は、単純にGitHub上に現在のsshキーが登録されていなかった(削除してしまった?)ことでした。 単純すぎますが、解決するまでの過程をメモしておきます。

エラー

普通にpushします。

確認

GitHubのトラブルシューティングの通り、コマンドで確認してみると、GitHub用のキーのエントリがありませんでした。(フィンガープリントは念のため伏せています)

追加

ssh-addでエントリを追加しました。(この手順、結局要るのかどうかは不明です。)

GitHubにキーを追加

公開鍵ファイルの内容をコピーして、GitHubのSSH Keysから登録します。下記も一部内容は伏せています。

再確認

もう一度コマンドで確認してみると、問題ないようです。これでsshでpushできるようになりました。

2012/11/25

Android ActionBarCompatでAndroid 2.xでもタブ+Fragmentを使う時にアクションボタンが切り替わるようにする

|
Android SDKに付属しているサンプルのActionBarCompatを少しだけ改良した ActionBarCompatRevというライブラリを作りました。
ActionBarCompatRev

ActionBarを使ったスタイルはAndroid 3.0以降で利用できますが、
実際にアプリ開発をするとなると、まだまだAndroid 2.3などの下位バージョンを
考慮する必要があり、デザイン・仕様を共通化するために前述のActionBarCompatなどを
使う必要があります。
もちろん、既にActionBarSherlockのような非常に高機能なライブラリも出ていますが
高機能ゆえにサイズも大きい、もしバグ(もしくは期待しない挙動)があったときに手を入れるのが難しい、など採用しにくいケースもあると思います。

そこで、規模が小さく内容を把握しやすいActionBarCompatを使おうと思ったのですが、問題だったのが、Tabを使ったレイアウトだとAndroid 2.xで動かした時に、タブ(=Fragment)を切り替えてもアクションボタンが切り替わらないということです。

ActionBarCompatのソースコードを読んでいくと、Fragmentのメニュー(onCreateOptionsMenu())が呼び出されるのはActivityが切り替わったタイミングだということが分かります。
なので、タブを使う場合のように1つのActivityの中で複数のFragmentが切り替わっていくパターンではFragmentごとにメニューを読み込んでくれません。

冒頭に書いたライブラリは、ActionBarCompatのこの点を改良したものです。
ライブラリを使ったサンプルを付けていますので、同じような問題に遭遇した方はお試しいただければと思います。

使うには、まずこのライブラリをAndroid Library Projectとして組込みます。

2012/10/27

Android 端末情報を確認・共有するアプリ

|
Androidアプリの開発をするときに困ることの1つに、端末の種類の多さがあります。

アプリが使う機能にもよりますが、想像以上に機種間の差はあったりするので検証する端末の選定は重要です。
しかしながら、キャリアやメーカーから公開されている仕様だけでは不十分なことが多く、もっと多くの情報を収集したいものです。
端末の情報を表示するアプリは既に多数ありますが、これをサーバへ送信して皆が見られるようにするためのアプリを公開しました。
DeviceInfo

名前が普通過ぎるので、アプリ名で検索すると残念ながら多数ヒットするのですが…。

このアプリのメニューから「送信」とすると、サーバへ端末情報が送られます。
もちろん、個人を特定するような情報は送っていません。
ファイルへのエクスポートもできます。

サーバサイドのアプリは現時点で準備中ですが、下記のような一覧が見られる予定です。
あとは如何に多くの端末情報が集められるかが課題ですね。