Androidアプリには「パスワードを表示する」というオプションがあるものもたくさんあります。セキュリティ面から考えると問題があるのですが、誤入力を避けるために用意されているのでしょう。今回はそれに倣ってパスワードを表示したり非表示にするサンプルを用意しました。
◆ テキストを入力する
Androidプロジェクトの設定
EditTextTest1.java
プロジェクト名: EditTextTest1 ビルドターゲット: Android 2.1-update1 アプリケーション名: EditTextTest1 パッケージ名: jp.co.triware.samples.EditTextTest1 アクティビティーの作成: EditTextTest1 最小SDKバージョン: 7
package jp.co.triware.samples.EditTextTest1; import android.app.Activity; import android.os.Bundle; import android.text.InputType; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; public class EditTextTest1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // パスワード入力エリアとパスワード表示チェックボックス final EditText etPassword = (EditText)findViewById(R.id.et_password); final CheckBox cbPassword = (CheckBox)findViewById(R.id.cb_password); // チェックボックスがクリックされたときの処理 cbPassword.setOnClickListener(new View.OnClickListener() { // @Override // JDK 1.5ではビルドエラー public void onClick(View v) { // カーソル位置(選択範囲)取得 int posStart = etPassword.getSelectionStart(); int posEnd = etPassword.getSelectionEnd(); // パスワード表示設定 if (cbPassword.isChecked() == true) { // チェックボックスONの場合はパスワードを表示する etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else { // チェックボックスOFFの場合はパスワードを表示しない etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } // カーソル位置(選択範囲)設定 etPassword.setSelection(posStart, posEnd); } }); } }
単にパスワード入力欄の入力タイプを変更するだけでは、カーソルが先頭へ移動してしまいます。getSelectionStart()、getSelectionEnd()でカーソル位置を覚えておいて、setSelection()でそれを反映するようにしています。
22行目の@Overrideは、JDK 1.6では問題ないのですが、JDK 1.5ではonClick()でビルドエラーが発生します。@Overrideについての詳細はまた別の記事でご紹介する予定です。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名前: " /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="name" android:inputType="text" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="メールアドレス: " /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="mail address" android:inputType="textEmailAddress" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="パスワード: " /> <EditText android:id="@+id/et_password" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="password" android:inputType="textPassword" /> </LinearLayout> <CheckBox android:id="@+id/cb_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="パスワードを表示する" android:textColor="#808080" android:textSize="14sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="備考: " /> <EditText android:id="@+id/et_password" android:layout_width="fill_parent" android:layout_height="fill_parent" android:inputType="textMultiLine" android:gravity="left|top" /> </LinearLayout>
android:inputTypeには入力タイプを指定します。指定する値の一部を以下の表にまとめます。
値 内容 text テキスト textEmailAddress メールアドレス textPassword パスワード(伏字) textVisiblePassword パスワード(表示) textMultiLine テキスト(複数行) textUri URI number 数字
実行結果
0 件のコメント:
コメントを投稿