UbuntuにインストールしたAndroidStudio4.2.2を日本語化する

とりあえずpleiadesを使用するのでダウンロードする。

ダウンロードしたら解凍して、plugins内にある「jp.sourceforge.mergedoc.pleiades」をandroid-studio/plugins/内にコピーする。

コピーしたら、android-studio/bin/studio64.vmoptionsを編集して下記の2行を追加する。

-Xverify:none
-javaagent:/android-studioを配置したディレクトリのフルパス/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

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

以下のコードを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の指定通り描画される。