arrow_back

入力ボックスをつける

「杏ちゃーん。機嫌なおして箱から出てきて」
「……どうせあたしは、つまんないミスをするような役立たずなので、 このまま封をして、どこへなりと送ってもらえれば」
「誰もそんなこと言ってないよ…… ほら、次は入力のことを教えてくれるんでしょ? このままじゃ私なにもわからないよ?」
「EditText」
「え?」
activity_main.xmlを開いてTextViewの下にEditTextを追加して。 TextViewをコピペして書き換えればいいから」
「教えてくれるなら箱から出てくればいいのに……とりあえずやってみるけど」
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

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

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>

</RelativeLayout>
「こうかな。idもedittextに書き換えて、できたら実行……と」
「……」
「んー、なんかそれっぽいのは出てきたけど前の文字と重なっちゃってる…… どうすればいいの? 杏ちゃん助けてー」
「……そこまで言うなら、ちょっとだけ見てみるけど。怒ってないわけじゃないんだからね」
「そんなホクホク顔で出てこられても、こっちの方が反応に困っちゃうよ……」
「どれどれ。ああ、EditTextは追加したけど、どこに配置したいのかを指定してないんだよ」
「どこにって、上から順々にじゃないの?」
「Androidの画面を作るときに部品をどう並べるか。 これを"レイアウト"って言うんだけど、最初に作られるレイアウトファイルはRelativeLayoutが使われてる」
「れらてぃぶ……」
「相対的って意味ね。基準の部品に対して、どう配置するかを指定する。 今回の場合は、すでにあるTextViewの下に配置したいからlayout_belowを指定すればいいよ」

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textview"
        android:text="Hello World!"/>

</RelativeLayout>
@id/textviewって、TextViewに設定したIDだよね」
「そう。IDは、プログラムから操作するためだけじゃなくて、こんな風にも使うんだよ。 あと、android:textの部分はいらないから消しちゃっていいよ。 あ、最後の/>は残してね」

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textview"/>

</RelativeLayout>
「ちゃんと表示されてる!すごいよ杏ちゃん!」
「えへへ……」

MainActivityからEditTextを取得

「じゃあ、次はプログラムからEditTextを操作するよ」
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int value1 = 1;
        int value2 = 3;
        double value = (double) value1 / value2;

        TextView textView = (TextView) findViewById(R.id.textview);
        textView.setText(String.valueOf(value));

        EditText editText = (EditText) findViewById(R.id.edittext);
        editText.setText("EditTextに文字列を表示!");

    }
「やりかたはTextViewのときと大体同じだね」
「うん。EditTextは初めて使うからimportを忘れないように」
「できた!」

入力した内容を取得する

「次はいよいよ、EditTextに入力された文字列を取得しよう。これまではsetTextで設定してたよね。 それとは反対にgetTextを使うよ。こんな感じで」

        EditText editText = (EditText) findViewById(R.id.edittext);
        editText.setText("EditTextに文字列を表示!");

        String string = editText.getText().toString();
        Log.d("EditTextTest", string);
    }
getTextの後ろにtoStringってあるのはこれは?」
「それは、EditTextから取得した内容をString型で取得するって意味。 setTextもgetTextも、EditTextのメソッドなんだよ」
「メソッド?」
「メソッドって言うのは、そのクラスを操作するために用意されている命令のこと。 setTextメソッドを使えば表示する内容を変更できる。 getTextメソッドを使えば表示の内容を取得できる」
「?」
「あー、少なくともTextViewやEditTextはAndroidが用意している部品だから、 そう言う風に使うメソッドがある。と言うことだけ知っておけば中身についてあれこれ考える必要はないんだよ」
「大まかにまとめてしまえば、不思議なパワーってことでいいのかな?」
「さすがにそれは大まかすぎる……」
「それを使うとなにが起こるかが大事ってことなんでしょ?」
「そう言われれば、そんな気もしてきた……いやけど……その説明ではあまりにも……」
「あと杏ちゃん。このLog.dっていうのは何なのかな? これも初めて出てきたと思うけど」
「それはログを表示する命令——つまりメソッドだよ。エラーが起こったときにログを確認したよね。 あのときはエラーのログを探したけど、Androidではエラー以外でもログを表示してアプリの動作を確認したりできる。 ちょっと実行してみて」
「うーん、なにも起こらない。前と同じ画面になったよ」
「画面じゃなくてログを見て。ログの重要度は"Verbose"に。フィルタは"EditTextTest"にしよう」
「本当だ! EditTextの文字が出てるね!」
「ね。Log.dの他にもLog.eを使えば、 エラーとしてログを表示できたりするよ。いろいろ試してみて」
「けど私がアプリの画面からEditTextの文字を書き換えても、ログは変わらないよ?」
「今のままだとアプリが起動したときに、setTextとgetText。ログ出力までが一気に実行されてるからね。 任意のタイミングでEditTextの内容を取得したいなら、イベントをハンドリングしないと」
「イベント? ハンドリング? もー、杏ちゃん英語使いすぎ! もっとわかるように日本語で説明して!」
「えー……けどプログラミングって単語そのものが英語だし……んっと……つまりね。 なにか物事が起こるのを捉えて、それに応じた処理をするってこと……かな?」
「とらえる? あ、キャッチすることね。うん、何となくわかった気がする」
「……」
「あれ。杏ちゃんどうしたの。顔が怖いよ?」
最終更新日: 2015/09/03