eclipseでレイアウトをリファクタリング

Viewで表示する文字列は、xmlに直接書くこともできるが、リソースとして定義しておいて、xmlやプログラムからはリソースを参照するようにした方が良い。多言語化するときはmust.

でも、、、layoutのxmlを書いてるときに、いきなり"@string/hoge"とか書いて、string.xmlを開いて、、、とやるのは面倒。まずはテキストを直接書いておいて、それでOKならリソースファイルに追加する、とやりたい。

そんな時eclipseリファクタリング機能を使えば、直テキストをリソース参照にすることができます!

こんなlayoutファイルがあったとして、

<TextView 
	android:id="@+id/tasks_title"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World"
    />

"Hello World"を範囲選択する。カーソル位置がそこにあるだけじゃダメで、一部でも良いので範囲選択(文字が反転している状態)にする必要がある。

メニューバーの"Refactor"->"Android"->"Extract Android String..."を選択すると以下のダイアログが出るのでid名とリソースファイルを入力する。ここで"Preview"をクリックするとdiffが見れる。良ければ"OK"

以下のようにリファクタされる。

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world"
    />
<resources>
    <string name="hello_world">Hello World</string>
...


これはかなり便利!他にもeclipseの知らない機能があるのかもしれないなぁ。

追記

このリファクタリング機能、javaソースコード内でも使える。

button.setText("Hello");

↑の場合、"Hello"を選択して、あとは上記と同じ。