テキストボックスに入力した文字列を取得して表示する

タイトル通りなんですが、入力した文字を取得して表示させます。
表示のさせ方はトースト(朝食じゃないです)やダイアログ、テキストビューで出します。

開発環境

AndroidStudio2.3
MacOS Sierra

プロジェクト作成

mitoavadn.hatenablog.com

Project : Get_String_Textbox
MinimumSDK : API19(KitKat)

レイアウト作成

今回のレイアウトでは

  • テキストボックス
  • ボタン
  • テキストビュー

をそれぞれ一つずつ配置します。
android:id="+id/hoge" のようにして、それぞれにidを設定してください。(後で使います)

コード例
<?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:orientation="vertical"
    tools:context="com.example.mito.get_string_textbox.MainActivity">


    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="156dp"
        android:ems="13"
        android:inputType="textPersonName"
        android:hint="Please Input Text"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="90dp"
        android:text="No Input" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:text="GET"
        android:id="@+id/button"/>
</RelativeLayout>

処理を書く

まず、テキストボックスやボタン、テキストビューの変数を用意します。

private EditText editText;
private Button button;
private TextView textView;

これらのインスタンスをonCreate内で生成します。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //変数 = (キャスト)findViewById(使いたいウィジェットのid)
        editText = (EditText) findViewById(R.id.editText);
        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);
}

ボタンにリスナー(その動作、今回で言えばボタンが押された時に呼ばれるやつ)を設定します。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //ここに押された時の処理を記述
    }
});

押されたら、テキストボックスから文字列を取得してそれをテキストビューにセットします。
onClick内に記述

String text = editText.getText().toString();    //EditText(テキストボックス)から文字列を取得
if (!text.equals("")){
    textView.setText(text);    //TextViewに文字列をセット
    editText.setText("");
}

setText() で文字列のセット、 getText() で文字列を取得できます。

今度は入力された文字列をトーストで表示してみましょう。

//Toast.makeText(コンテキスト, 表示したい文字列, どれぐらい(時間)表示させたいか(LONG or SHORT)).show();
Toast.makeText(view.getContext(), text, Toast.LENGTH_LONG).show();

最後にshow()しないと表示されません。(mitoは忘れていて悩んでました)
コンテキストについては今は詳しく知らなくてもいいです。(thisや上のコードのようにすると良さげ)
これでトースト表示まではできたはずです。
最後に、ダイアログで表示させます。

new AlertDialog.Builder(view.getContext())
            .setTitle("ダイアログ")    //タイトル
            .setMessage(text)    //本文
            .setPositiveButton("OK", null)    //押したら閉じるボタンみたいなやつのテキスト(第一引数)
            .show();

ダイアログはこちらからコピペで使えます。
Fragmentを作った方がいいと書いてありますが、今回は書いていません。

おまけ

ついでにボタンを押した時に何も入力されていなかったらトーストを表示されるようにしてみましょう。

if (!text.equals("")){
    ...
    ...
}
else {
    Toast.makeText(view.getContext(), "入力してください", Toast.LENGTH_SHORT).show();
}

最終的なコード

MainActivity.java

package com.example.mito.get_string_textbox;

import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText) findViewById(R.id.editText);
        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = editText.getText().toString();
                if (!text.equals("")){
                    textView.setText(text);
                    editText.setText("");
                    Toast.makeText(view.getContext(), text, Toast.LENGTH_SHORT).show();
                    new AlertDialog.Builder(view.getContext())
                            .setTitle("ダイアログ")
                            .setMessage(text)
                            .setPositiveButton("close", null)
                            .show();
                }
                else {
                    Toast.makeText(view.getContext(), "入力してください", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

activity_main.xml

<?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:orientation="vertical"
    tools:context="com.example.mito.get_string_textbox.MainActivity">


    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="156dp"
        android:ems="13"
        android:inputType="textPersonName"
        android:hint="Please Input Text"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="90dp"
        android:text="No Input" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:text="GET"
        android:id="@+id/button"/>
</RelativeLayout>

mito.

3/11 追記
githubにて今回のプロジェクトを公開しました。
リンク(https://github.com/mitohato/AndroidTutorial)