在接受用户输入一次后,我需要将 EditText
设为只读。使用 getKeyListener()
将其 KeyListener
对象保存在变量中后,我将其 KeyListener
设置为 null。但是,在我使用 setKeyListener()
恢复 KeyListener 对象后,InputType
信息(例如:电子邮件、URI 等)丢失了。
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
而不是电子邮件。
将 KeyListener
设置为 null 后,如何获取 EditText
之前的 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);
重置按键监听器后
关于android - 将 Android 中的 EditText 设置为 null 后恢复 KeyListener 会丢失输入类型选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948356/