我在做计算器。所以我自己做了 Buttons
用数字和函数。必须计算的表达式位于 EditText
,因为我希望用户可以在表达式的中间添加数字或函数,所以 EditText
我有 cursor
. 但我想禁用 Keyboard
当用户单击 EditText
. 我发现这个例子可以 Android 2.3
,但与 ICS
禁用 Keyboard
还有光标。
public class NoImeEditText extends EditText {
public NoImeEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onCheckIsTextEditor() {
return false;
}
}
然后我用这个 NoImeEditText
在我的 XML
文件
<com.my.package.NoImeEditText
android:id="@+id/etMy"
....
/>
我怎样才能使这个编辑文本与ics兼容???谢谢。
15条答案
按热度按时间2wnc66cl1#
禁用键盘(api 11至当前版本)
这是迄今为止我发现的最好的禁用键盘的方法(我也见过很多)。
无需使用反射或设置
InputType
设置为空。重新启用键盘
下面是如何在需要时重新启用键盘。
关于为什么需要撤销复杂的pre-api 21版本,请参见本问答
setTextIsSelectable(true)
:使用settextisselectable禁用触摸屏后如何启用触摸屏
这个答案需要更彻底的检验。
我已经测试过了
setShowSoftInputOnFocus
在更高的api设备上,但是在@androiddeveloper发表了下面的评论之后,我发现这需要进行更彻底的测试。下面是一些剪切粘贴代码来帮助测试这个答案。如果您可以确认它是否适用于api 11到20,请留下评论。我没有任何api 11-20设备,我的模拟器有问题。
活动\u main.xml
主活动.java
eqqqjvef2#
添加到alexkucherenko解决方案:调用后光标消失的问题
setInputType(0)
是由于ics(和jb)上的框架错误造成的。错误记录如下:https://code.google.com/p/android/issues/detail?id=27609.
若要解决此问题,请致电
setRawInputType(InputType.TYPE_CLASS_TEXT)
就在那之后setInputType
打电话。要阻止键盘出现,只需重写
OnTouchListener
编辑文本并返回true(吞下触摸事件):光标出现在gb设备上而不是ics+上的原因让我花了几个小时才把头发拔出来,所以我希望这能节省一些人的时间。
5t7ly7z53#
尝试:
android:editable="false"
或者android:inputType="none"
sbdsn5lh4#
这对我有用。先加上这个
android:windowSoftInputMode="stateHidden"
在你的android清单文件中,在你的活动下。如下所示:然后在Activity的oncreate方法中,添加以下代码:
如果希望指针可见,请在xml中添加此项
android:textIsSelectable="true"
.这将使指针可见。这样,当您的活动开始时,键盘将不会弹出,当您单击编辑文本时,键盘也将隐藏。
qij5mzcb5#
7hiiyaii6#
把这一行放在manifest中的activity标记中android:windowsoftinputmode=“隐藏状态”
trnvg8h37#
我不知道´我不知道这个答案是否更好,但我找到了一个可能更快的解决办法。在xml上,只需在edittext上添加以下属性:
然后用onclicklistener做你需要的事情。
1cklez4t8#
这里是一个网站,将给你什么你需要的
作为摘要,它提供了
InputMethodManager
以及View
来自android开发者。它将引用getWindowToken
内部View
以及hideSoftInputFromWindow()
为了InputMethodManager
一个更好的答案是在链接,希望这有帮助。下面是一个使用ontouch事件的示例:
这是同一个网站的另一个例子。这声称有效,但似乎是个坏主意,因为您的editbox为空,它将不再是编辑器:
希望这能给你指明正确的方向
disbfnqx9#
从stackoverflow的多个地方收集解决方案,我想下一个总结:
如果您不需要在活动的任何地方显示键盘,只需使用用于对话框的下一个标志(从这里获得):
如果您不希望它只用于特定的edittext,您可以使用这个(从这里获得):
或者这个(取自这里):
yhqotfr810#
mzmfm0qo11#
下面的代码同时适用于api>=11和api<11。光标仍然可用。
lvjbypge12#
刚刚设定:
或在构造函数中:
sqserrrh13#
我找到了适合我的解决方案。当单击edittext时,它还会将光标放置在正确的位置。
u7up0aaq14#
您也可以直接在api 21+上使用setshowsoftinputonfocus(布尔值),或通过api 14+上的反射使用setshowsoftinputonfocus:
6ju8rftf15#
将以下属性添加到布局文件中的edittext控制器
我已经使用这个解决方案一段时间了,它对我很好。