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

标签 android android-edittext android-softkeyboard android-inputtype

在接受用户输入一次后,我需要将 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_AD‌​DRESS); 

重置按键监听器后

关于android - 将 Android 中的 EditText 设置为 null 后恢复 KeyListener 会丢失输入类型选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948356/

相关文章:

Android:如何在自定义 ListView 中添加列标题

java - 使用按钮更改其他 Activity 的背景

java - "public abstract class SampleAdapter <T extends Adapter> extends ViewGroup"是什么意思?

android - 检查类型时,EditText 是一个 TextView

尽管 edittext.isCursorVisible() 返回 true,但仍未看到 Android edittext 光标

android - 当软键盘可见时隐藏状态栏

安卓动画序列

android - edittext 中禁用文本的 android 默认颜色是什么?

android - 软键盘不会触发 ScrollView 中的滚动

android - SoftKeyboard 隐藏 EditText