Androidでパスワードを見えたり見えなかったりするの
やりたいこと
チェックボックスをオンオフすると、パスワードが見えたり、点々になったり。
ぽいんと(僕が悩んだとこだけ)
最初、このEditTextがパスワードだよーって書いていたんだけど、
ってのが2つあって迷った。
後者が後から出来たのはリレファレンス見て分かったんだけど、
いまいち、違いが分からない。
んでまぁ、適当に調べたら、
後者のやつが、古い属性達を置き換えてくれるらしくて、
新旧がいりまじっても、古いやつは無視してくれるらしい。
結局タグを使わずに、ソース側でsetInputTypeを使ったので、関係ないっちゃない。
※setInputTypeはandroid:inputTypeと同意
そうした理由は、デフォルトを与えて、
あとはチェックボックスの状態変化毎に書き換えにするつもりだったので、
全部まとめてソース側でやっちゃえと。
以下、レイアウトとソース。
layout(hoge.xml)
<EditText android:id="@+id/password" android:hint="@string/password_hint" android:contentDescription="@string/password_description" android:singleLine="true" android:layout_height="wrap_content" android:layout_width="fill_parent" android:nextFocusDown="@+id/next" /> CheckBox android:id="@+id/password_visible_checkbox" android:text="@string/password_visible_checkbox_on" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@+id/password" android:checked="false" />
source
private EditText mPassword;
private int mDefault
private EditText mCb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hoge);
mPassword= (EditText) findViewById(R.id.password);
mDefault=password.getInputType();
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | default);
mCb = (CheckBox) findViewById(R.id.password_visible_checkbox);
mCb.setOnCheckedChangeListener(this);
}
//OnCheckedChangeListenerをimplementsしちゃいました(・ω<)てへぺろ☆
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (mCb.getId()) {
case R.id.password_visible_checkbox:
if (mCb.isChecked()) {
mPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | mDefault);
mCb.setText(getString(R.string.account_password_visible_checkbox_off));
} else {
mPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | mDefault);
mCb.setText(getString(R.string.account_password_visible_checkbox_on));
}
//カーソルが前にいっちゃうのはイヤー
mPassword.setSelection(mPasswordView.getText().length());
}
}