物理キーボード接続時にソフトウェアキーボードも表示する設定を促す

以下のコードをonResume()などに書くと良い

if (activityInstance.getResources().getConfiguration().hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
    Toast.makeText(activityInstance, "物理キーボードを無効にしてください。", Toast.LENGTH_SHORT).show();
    ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showInputMethodPicker();
}

Activityのライフサイクル

AndroidアプリはActivityという画面のベースのようなもので構成される。このActivityのプロセスはAndroid OSで管理されており、基本的には「いつ画面が破棄されても大丈夫な仕組み」を前提に設計をしていく必要がある。

IntentとonActivityResult()

他のActivityを表示して処理結果を取得するにはstartActivityForResult()を使用する。処理結果を取得する必要がない場合にはstartActivity()を使用する。

// このコードで処理結果取得モードで他のActivityを開始する
Intent intent = new Intent(activityInstance.getApplicationContext(), TargetActivity.class);
activityInstance.startActivityForResult(intent, 1);

// 開始されたActivity側では処理結果を以下のコードで返す
Intent data = new Intent();
data.putExtra("test", "value");
activityInstance.setResult(RESULT_OK, data);
activityInstance.finish();

// 呼び出し元では下記メソッドをオーバーライドして結果を取得する
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case 1:
            // resultには"value"が入る
            String result = data.getStringExtra("test");
            break;
        }
    }
}

Androidのスレッドについて

AndroidのUI(View)をコントロールするスレッドは通常のスレッドとは異なり、アプリが起動した段階から専用のスレッドが開始される。すべてのUI(View)の描画処理などはそのスレッドが行うため、他のスレッドからはViewに変更を加える事はできない。

AndroidのUIスレッド以外のスレッドからUIに変更を加えたい場合は、Android.os.Handlerのインスタンスを生成しpostメソッドで実行したいRunnableを渡す。UIスレッドはスケジュールされた順番にRunnableを実行してUIを描画していく。

AndroidのLinearLayoutについて

LinearLayout内に配置した子要素は、そのままの状態でweightを指定しても、正しい描画にならない事がある。heightまたはwidthをwrap_contentから0dpに変更すると正しくweightの指定通り描画される。

Androidアプリ開発でstring.xmlを使用する理由

昔から小規模アプリケーションを開発していると、自然にラベルやボタンのテキストを直打ちしていたので、Androidアプリを初めて作るときはとても戸惑った。直接入力すると警告が出るのです!!

string.xmlに値を登録してから使うのですが、これがまた慣れないと面倒で仕方ない。しかし、多言語対応する場合にはこれがとても大事になるので、しっかりしたいと思う。。。