编辑文本键监听器

18

我在布局中有一个 edittext 和一个按钮,我的代码中我将 edittextkeyListener 设置为null

    editText.setKeyListener(null);

我想禁止在edittext中输入文字,然后在按钮点击后,我应该可以在edittext中输入文字。我该如何做?这是一个简单的问题,但是我找不到任何解决方案。非常感谢您的帮助。

3个回答

25

我可能来晚了,但是这是我做的方法:

public class MyActivity extends Activity
{
    private KeyListener listener;
    private EditText editText;

    public void onCreate(...)
    {
        editText = ... // Get EditText from somewhere
        listener = editText.getKeyListener(); // Save the default KeyListener!!!
        editText.setKeyListener(null); // Disable input
    }

    // When you click your button, restore the default KeyListener
    public void buttonClickHandler(...)
    {
        editText.setKeyListener(listener);
    }
}

基本上,你需要在调用setKeyListener(null)之前先保存EditText的默认KeyListener。然后,在单击按钮时,再次调用setKeyListener,并传递先前保存的默认侦听器。


正是我想要的...虽然我还没有尝试过,但它听起来很有前途。 - SKT

7
您可以使用这个:
// When you click your button, restore the default KeyListener
public void buttonClickHandler(...)
{
    editText.setKeyListener(new EditText(getApplicationContext()).getKeyListener());
}

我认为rainai的答案更正确。那样可以保留edittext的原始键盘监听器。 - SKT
我尝试了rainai的方法,但对我无效,所以我使用了这个方法,因为它有效。 :) - Amr Tarek Abdelghafar
Rainai的方法对我也没用。不过这个方法有效。 - Rishabh876
我尝试了这种方法,但是当我点击输入时键盘并没有出现。有人遇到过这个问题吗? - Charlesjean

2

在Android上有一个错误,请看这里:错误

但在XML文件中,您可以这样做。使用android:editable="false"

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:editable="false" <<<<<<<
</EditText>

抱歉,如果我们这样做,即使在禁用模式下,我们仍然可以输入到编辑文本中。虽然这可能会让用户感觉他无法输入到编辑文本中,但我不能接受这个答案。 - SKT
我想做的是仅通过代码实现。因为当我再次点击按钮时,我希望将edittext的属性恢复为以前的状态(无法输入)。所以我不能使用xml… 但我会检查java代码中是否有类似可编辑的属性... 同时,如果你找到答案,请通过发布它来帮助我...谢谢你。 - SKT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接