2013年1月25日金曜日

ダイアログで複数のエディットテキスト(テキストボックス)を表示したい!!(EditText)


前から、うすうす気づいていたのですが、
なんと、Androi4以降のライブラリーでは、
showDialogメソッドが非推奨になっておりました。

うわぁー。。

Android5.0から、復活することを少し願いつつ、
Fragmentも徐々に勉強しないといけないかも。。。

という不安を背負いながら、
今回もダイアログ処理についてです。

複数の入力式のテキストボックスをダイアログに
表示させる方法を説明いたします。

ログインIDとパスワードの設定画面などを、
別Activityを作らずに、サクッと処理したいときに
お勧めです。

~エディットテキスト使い方

■生成
EditText editText = new EditText(getApplicationContext());

生成は他のアプリと同じような感じです。

■文字列取得
String sText = editText.getText().toString();

テキストボックスに入力された文字を文字列として、
取得する方法です。

■ボックス内の設定
editText1.setInputType( InputType.TYPE_CLASS_TEXT );

setInputTypeで設定できます。
InputType.TYPE_CLASS_TEXTは
テキストボックス内での改行禁止とする設定です。

■サンプルソース

package com.example.edittext;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class FullscreenActivity extends Activity  implements OnClickListener{

private EditText editText1;
private EditText editText2;
private String   sBefLogin;
    private String   sBefPswd;

  private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        //上から下にオブジェクトを配置するよう設定
        layout.setOrientation(LinearLayout.VERTICAL);
        //画面表示の設定
        setContentView(layout);            
//ボタンを画面に追加する
layout.addView(makeButton("ダイアログ", 0));
}

@Override
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
switch (id) {
case 0:
//エディットテキストの生成
editText1 = new EditText(getApplicationContext());
editText2 = new EditText(getApplicationContext());

//外枠とパーツの作成
LinearLayout layout = new LinearLayout(getApplicationContext());
//上から下にパーツを組み込む設定
layout.setOrientation(LinearLayout.VERTICAL);

//外枠にパーツを組み込む
layout.addView(make_TextView("ログイン"), new LinearLayout.LayoutParams( 300, 40));
layout.addView(editText1, new LinearLayout.LayoutParams( 300,70));
layout.addView(make_TextView("パスワード"), new LinearLayout.LayoutParams( 300, 40));
layout.addView(editText2, new LinearLayout.LayoutParams( 300,70));

//レイアウトをダイアログに設定
dialog.setView(layout);

//タイトルの設定
dialog.setTitle("タイトル");

//エディットボックスの入力タイプの設定
editText1.setInputType( InputType.TYPE_CLASS_TEXT );
editText2.setInputType( InputType.TYPE_CLASS_TEXT |                    InputType.TYPE_TEXT_VARIATION_PASSWORD);

//過去の入力内容が表示されるようにする
editText1.setText(sBefLogin);
editText2.setText(sBefPswd);

// dialogOKボタン
dialog.setPositiveButton("OK",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
sBefLogin= editText1.getText().toString();
sBefPswd = editText2.getText().toString();
Toast.makeText(getApplicationContext(), editText1.getText().toString(),                Toast.LENGTH_SHORT).show();
     // ダイアログを消す
removeDialog(0);
                }
            });
// dialogキャンセルボタン
            dialog.setNegativeButton("キャンセル",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
                }
            });
break;
        }
  return dialog.create();
    }

    //ボタンを作成します
    private Button makeButton(String sText,int id) {
        Button button=new Button(this);
        //ボタンの表示テキストの設定
        button.setText(sText);
        //ボタンのIDの割り振り
        button.setId(id);
        //クリックリスナーの実装
        button.setOnClickListener(this);
        //ボタンの表示方法の設定
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        return button;
    }

    private TextView make_TextView(String sMessage){
//テキストビューの生成
TextView tv = new TextView(getApplicationContext());
//メッセージの設定
tv.setText(sMessage);
return tv;
}

@Override
public void onClick(View arg0) {
//ダイアログの出現
showDialog(0);
}
}

■実行結果
1.初期表示


2,ボタン押下後






パスワードの表示を見ると
●●になっていますね。

なんか、パスワードっぽい感じで。

//外枠とパーツの作成

LinearLayout layout = new LinearLayout(getApplicationContext());



EditTextにこのレイアウト(layout)を設定するイメージです



Activityをわざわざ生成しなくてもいい、
ダイアログは本当に便利ですね。

ついでにですが、removeDialogをすることで、
Dialogふだけでなく、editTextも初期化されます。

0 件のコメント:

コメントを投稿