@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

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());
  }
}