我有一个7x6的EditText
视图网格。我希望在应用程序启动时禁用所有这些功能,即它们的行为应该与普通TextViews
一样,并且不可编辑。然后用户点击网格中的一个单元格,它改变其背景并执行一些视觉效果。如果用户再次单击该单元格,则应允许编辑。我正在与OnClick()
和OnFocusChange()
听众进行斗争,但我无法完成这样的基本互动。
使用setEnabled()
和setFocusable()
无济于事。我想知道为什么即使这样一个简单的任务在Android上也变得如此困难
答案 0 :(得分:23)
我终于找到了解决方案。这是一个打电话的问题
setFocusableInTouchMode(boolean)
setFocusable(boolean)
首次创建EditText
时,它可以截取点击次数。然后可以再次设置这些标志以使EditText
可编辑,请求焦点,并使用InputMethodManager
方法手动显示/隐藏软键盘
答案 1 :(得分:4)
尝试使用此setFocusableOnTouch()
代替setFocusable()
方法。
答案 2 :(得分:2)
将输入类型设置为null是不够的,因为它只能抑制软键盘,如果设备有硬件键盘,则会有输入。因此,为了禁止任何编辑,您应该执行以下操作:
editText.setInputType(InputType.TYPE_NULL);
editText.setFilters(new InputFilter[]
{
new InputFilter()
{
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend)
{
return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
}
}
});
这样可以保证EditText
内容不会被更改
答案 3 :(得分:2)
首先在edittext
中将这些行写在你的xml中android:enabled="false"
而不是使用java中的代码,如下所示
Boolean check = true;
EDITEXT.setEnabled(check);
check=!check;
答案 4 :(得分:0)
由于您使用gridview来实现您的顾虑,您可以执行以下操作。
extedned类将包含名为editable的布尔属性,在gridviewy的onItemclicklisterner中使用此属性,可以为editetext调用setEditable或setFocusabel或两者。
如果你分享你的代码,我可以详细说明这个问题。
答案 5 :(得分:-1)
您可以进行以下操作:
如果您想使edittext不可编辑,请使用以下方法
edittext.setInputtype(Null);
如果您想使edittext可编辑,请使用相同的方法并设置正确的输入类型 访问following link了解更多信息
答案 6 :(得分:-1)
根据Android指南,请使用LongKeyPress获取您所拥有的问题“如果用户再次点击该单元格,则应该允许编辑”