海外端末の日本語化


海外端末を日本語化するには、大きく3つのステップがあります。
1. 言語設定を日本語にする
2. 日本語入力アプリをインストールする
3. キーボードを日本語にする

1. 言語設定を日本語にする
(1) Seitting -> Langauge & Input -> Langauge を開きます。
(2) 「日本語」 を選択します。

20120225_nihongo_langauge_en

2. 日本語入力アプリをインストールする
(1) Google PLay から、日本語入力アプリをダウンロードします。
この時点では、日本語が入力でできないので、「nihongo」と入力して検索します。
(2) 「Google Japanese Input (Google日本語入力)」 を選択して、インストールします。

20120225_nihongo_google_play

3. キーボードを日本語にする
(1) Google日本語入力 アプリを起動します。
(2) インストール後の設定 が表示されます。
以降、指示された設定を行います。
(3) 言語と入力 が表示されるので、「Google日本語入力」を選択します。
(4) 注意 が表示されますが、「OK」を選択して、先に進みます。
(5) 入力方法の設定 が表示されるので、「Google日本語入力」を選択します。
(6) 入力方法の選択が表示されるので、「Google日本語入力」を選択します。

20120225_nihongo_valid 20120225_nihongo_langauge_input_ja 20120225_nihongo_caution
20120225_nihongo_input_setting 20120225_nihongo_input_select

4. 確認
Google検索 を起動します。
日本語キーボードが表示されれば、OKです。

20120225_nihongo_keyboard


ステータスバー と タイトルバー の大きさ


ステータスバーとタイトルバーに大きさを表示する。
現行では、ステータスバーやタイトルバーの大きさを取得する簡便な方法がありません。

従来の方法

ネットでは、下記のように計算する方法が紹介されています。

Rect rect= new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight= rect.top;
int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight = contentViewTop - statusBarHeight;
if(titleBarHeight < 0){
  titleBarHeight = 0;
}

従来の方法の問題点

しかし、この方法では、正しく計算できない場合があります。

下記の4つのケースがあります。
(1) ステータスバーとタイトルバーが表示されている。
(2) ステータスバーだけが表示されている。
(3) タイトルバーだけが表示されている。
(4) ステータスバーとタイトルバーが両方とも非表示である。

下図に簡単に示します。

S: ステータスバー
T: タイトルバー
R: rect のビュー
C: ID_ANDROID_CONTENT のビュー
灰色: ステータスバーとタイトルバーを除いた領域

rect は 装飾物 (screen decorations) を除いた全面的な表示サイズ(the overall visible display size) のようです。
これは4つのケースにおいて、同じ値が取得されます。

ID_ANDROID_CONTENT は、ステータスバーとタイトルバーを除いた画面 (図の灰色) のはずです。
しかし、2のケースでは、そうなりません。

また、2と4のケースでは、rect と ID_ANDROID_CONTENT は同じ値です。
この2つの値からだけでは、2と4のケースが区別できません。

今回の方法

そこで、さらに2つの値を取得することにします。
1) 灰色の領域を、最上位の LinearLayout から取得します。

2) タイトルバーの有無を R.id.title から取得します。
R.id.title はタイトルバーのテキスト領域です。
タイトルバーの高さは 38px ですが、35px と少し小さい値が取得されます。

これらを組みわせると、4つのケースにおいて、
ステータスバーとタイトルバーの大きさが計算できます。

ソースは code.google に置いています。

ステータスバー と タイトルバー を非表示にする

ステータスバーとタイトルバーを非表示にするのは、Java でも、AndroidManifest でも設定できます。

Java では。
タイトルバーを非表示にする

requestWindowFeature(Window.FEATURE_NO_TITLE);

ステータスバーを非表示にする

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

AndroidManifest では。
タイトルバーを非表示にする

android:theme="@android:style/Theme.NoTitleBar"

ステータスバーとタイトルバーを非表示にする

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

ステータスバーを非表示にするのは、下記かと思ったが、これはエラーになります。

android:theme="@android:style/Theme.Fullscreen"

参考
Getting Height of Status and Title Bar
ステータスバーの高さを取得する方法
Activityのビュー階層とコンテンツルート(View)を取得する
reference: getWindowVisibleDisplayFrame
reference: ID_ANDROID_CONTENT
reference: R.id.title
reference: Theme_NoTitleBar_Fullscreen
reference: FEATURE_NO_TITLE
reference: FLAG_FULLSCREEN


SVN に res ディレクトリが登録できない


現象
Android のプロジェクトを SVN に登録したところ、
res ディレクトリが登録できなかった。

調査
ネットで調べてみたら、
.svn の log うんぬん という記事が見つかった。
res ディレクトリを見てみたら、
.svn はなくて、.DS_Store という隠しファイルがあった。
.DS_Store はファイル情報のキャッシュみたいだが、
何やら悪さをするという記事が見つかった。

原因
.DS_Store でした。
今回の res ディレクトリは新規作成ではなく、
他のプロジェクトからコピーしたもの。
そのさい、.DS_Store もついてきた模様。

対策
.DS_Store を削除してから、
eclips にて チーム -> クリーンアップ を実行して、
コミットしたら、無事に SVN に登録できた。

参考
svn: Working copy locked; try performing ‘cleanup’ クリーンアップができない
Macでアイコンやフォルダのトラブルを「.DS_Store」ファイルを削除して対処する方法


TextView に枠線を表示する


やり方は2つあります。

1. drawable ディレトリに xml ファイルを置き shape を設定する
この方法は、ボタンのカスタマイズとして、 Andoird Layout Cookbook に載っています。

2. LinearLayout に background を設定する

ソースコードは Google code に置いています。

参考
XMLで枠線を描画する
Androidで罫線描画