開発をはじめてからもうすぐ3ヶ月。私が最初の方でつまづいたちょっとしたエラーたちをご紹介します。
(初心者向けなのでプログラムに詳しい方は読み飛ばしてください^^)
【 なぜこんな単純なソースでエラーが?? 】
最初の頃は(今でもそうですが)、XMLレイアウトを簡単に組んで実行して意図したとおりに
動いているか確認したいものです。それで簡単にえい、や!で作成したサンプルコードが
下記のものです。
エラーが出るサンプルコード)
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_marginBottom="10sp">
<TextView
android:text="あああ"
android:textStyle="bold"
android:layout_gravity="center">
</TextView>
<TextView
android:text="いいい"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_marginLeft="5sp">
</TextView>
</LinearLayout>
書いてみても特に構文エラー(書いて保存すると赤線引かれしまうアレです)
も出ないし起動してみると、エラーが出ます><
なんで、XMLでエラーでるんだよぉ!と嘆いたことありませんか。
このエラーはTextViewなどのタグの必須要素が指定されてないので
エラーが出たわけです。
必須要素はlayout_widthとlayout_heightです。
指定するときはいつでもこのお二方を入れてあげてください。
エラーを修正したサンプルコード)
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_marginBottom="10sp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="あああ"
android:textStyle="bold"
android:layout_gravity="center">
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="いいい"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_marginLeft="5sp">
</TextView>
</LinearLayout>
【 文字列を差し替えただけなのに動かない 】
とりあえずレイアウトがうまくいったので、
@stringを使って日本語と英語によって振り分けしようと文章を入れ替えたら
動かないということは今までにありませんでしたか。
こんな指定をすると構文エラーがでますので、注意しましょう。
<string name="param1">1. Let's Try Again</string>
<string name="param2">2. ' please touch me '</string>
何がいけないのかというと ' (アポストロフィー)が使われていることです。
アポストロフィーはプログラムで使用しますので、使うとプログラムだと解釈されて
「こんなところに書いてくれるなー!」と怒られてしまうわけですね。
(他の言語だと文字列に書くスペースなので、そんな解釈されることもない場合もあるのですが
Androidはエラーを出すプログラムのようです。)
じゃあ、アポストロフィーを使った表現は避けて記述しなきゃだめなのでしょうか。
いいえ、そんなことはありません。
Let's TryやI'mという表現もよく使う英文だし、使えないとうっとおしくて仕方ありません。
そんなときのためにあるのがエスケープシーケンス。
さきほどのエラーが出る文字列にエスケープシーケンスを入れてみましょう。
<string name="param1">1. Let\'s Try Again</string>
こんな感じに入れて実行すると、Let's Try Again と表示されます。
\を入れることで「この文字はプログラムに出てくるかもしれないけど、文字列ですから!!」と主張できるんです。
ちなみに\マークを表示させたい場合は、\をもう一つ記述します。
「\\」で「\」と表示されます。
2011.7.22
神森 真昼