我需要在从用户那里获取一次输入后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_ADDRESS);
重置密钥侦听器后
fathersNameET.setKeyListener(new BaseKeyListener() {
@Override
public int getInputType() {
return 1;
}
});
fathersNameET 是您的 editText 实例名称。
谢谢
以下内容应该能够在调用后阻止用户键入它
et.setFocusable(false);