在将 EditText 设置为 null 后恢复 android 的 KeyListener 会丢失输入类型选项



我需要在从用户那里获取一次输入后EditText设为只读。在使用 getKeyListener() 将其KeyListener对象保存在变量中后,我将其KeyListener设置为 null。但是InputType信息(例如:电子邮件,URI等)在使用setKeyListener()恢复KeyListener对象后丢失。

public class MainActivity extends Activity {
EditText et;
KeyListener kl;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_main);
    et = (EditText) findViewById(R.id.et1);
    et.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
    kl = et.getKeyListener();
    et.setKeyListener(null);
    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("ST","changed");                              
            et.setKeyListener(kl);              
        }
    });
}
}

在这里,我将InputType设置为InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS但是在恢复KeyListener时,软键盘的类型是TPYE_CLASS_TEXT而不是电子邮件。

在将EditText KeyListener设置为 null 后,如何获取以前的 InputType 状态?

编辑我在et.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)后添加了一个日志来获取 InputType 的值,我得到以下内容:

D/ST(16190): et.getInputType() : 33, et.getKeyListener().getInputType() : 1

恢复KeyListener后,我得到以下结果:

D/ST(16190): et.getInputType() : 1 et.getKeyListener().getInputType() : 1

他们不应该是一样的吗?

调度的软键盘类型取决于哪个值(et.getInputType()et.getKeyListener().getInputType())?

更合适:

et.setEnabled(false);

否则

et.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_AD‌​DRESS); 

重置密钥侦听器后

fathersNameET.setKeyListener(new BaseKeyListener() {
                    @Override
                    public int getInputType() {
                        return 1;
                    }
                });

fathersNameET 是您的 editText 实例名称。

谢谢

以下内容应该能够在调用后阻止用户键入它

et.setFocusable(false);

最新更新