Android切换按钮无法正常使用密码字段

时间:2013-02-27 10:32:10

标签: android android-layout

当我点击切换按钮时,它会将密码字段更改为正常查看文本,但是当我再次单击它时,它不会将文本字段更改为密码类型。为什么会这样?

这是我的代码,

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);
setContentView(R.layout.text);
chkcmd = (Button) findViewById(R.id.but3);
passtog = (ToggleButton) findViewById(R.id.tb1);
input = (EditText) findViewById(R.id.et1);
display = (TextView) findViewById(R.id.tv2);
passtog.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View V) {
// TODO Auto-generated method stub

if(passtog.isChecked())
{
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
}

else if(!passtog.isChecked())
{
input.setInputType(InputType.TYPE_CLASS_TEXT);
}
}
});

2 个答案:

答案 0 :(得分:1)

自支持库v24.2.0起。你可以轻松地解决这个问题

您需要做的只是:

  1. 将设计库添加到您的家属

    dependencies {
         compile "com.android.support:design:25.1.0"
    }
    
  2. TextInputEditTextTextInputLayout

    结合使用
    <android.support.design.widget.TextInputLayout
        android:id="@+id/etPasswordLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password_hint"
            android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>
    
  3. passwordToggleEnabled属性将使密码切换显示

    1. 在您的根布局中,请不要忘记添加xmlns:app="http://schemas.android.com/apk/res-auto"

    2. 您可以使用以下方式自定义密码切换:

    3. app:passwordToggleDrawable - 可绘制用作密码输入可见性切换图标 app:passwordToggleTint - 用于密码输入可见性切换的图标 app:passwordToggleTintMode - 用于应用背景色调的混合模式。

      TextInputLayout documentation中的更多详情。

      enter image description here

答案 1 :(得分:0)

除了实现ClickListener之外,您还应该使用CheckChangedListener,如下所示:

passtog.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        // Save the state here
      if(isChecked)
       {
        input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
        }
       else
        {
         input.setInputType(InputType.TYPE_CLASS_TEXT);
         }
     }
  });