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 件のコメント:
コメントを投稿