在我的应用中,我使用以下代码禁用了键盘(我现在使用自定义键盘):
editText.setInputType(InputType.TYPE_NULL);
现在,我的问题是文本光标不再出现在编辑文本中。我该怎么办?任何建议都将非常感激。
答案 0 :(得分:20)
错误跟踪器Issue opened in bug tracker中已打开一个问题。 其中一位用户建议使用适用于“大多数”设备的方法。
简而言之,您所要做的就是致电:
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
EditText 视图(在您调用editText.setInputType(InputType.TYPE_NULL);
之后)。
您可能还应该设置:
editText.setTextIsSelectable(true);
为了使文本可以选择(虽然在三星Galaxy SIII中似乎不能正常工作)。此方法仅从 HONEYCOMB (api11)开始提供,因此在开发旧版Android时请记住这一点。
同时声明您的 EditText 不应该是活动开始时获得焦点的第一个视图(如果是 - 只是来自另一个视图的requestFocus())。虽然我(个人)没有遇到任何问题。
答案 1 :(得分:0)
为什么不实现完整的IME,而不仅仅是为自定义键盘使用自定义视图?这将解决您的光标问题,甚至可以在您的应用程序之外使用键盘(如果需要)。
如果你想这样做,这个答案有几个有用的链接: How to develop a soft keyboard for Android?
答案 2 :(得分:0)
我真的不建议这样做。写一个好的完全成熟的IME真的很难。此外,除非您在键盘上花费数月时间,否则用户可以从键盘(自动校正,Swyping,下一个单词预测,更改语言的能力)中获得功能。任何不允许我使用Swype的应用程序都会被立即删除(偏见:我在Swype android上工作)。
但是如果你想要作为键盘与操作系统完全集成,你将不得不编写一个InputMethodService。然后,用户可以在键盘选择菜单中选择键盘,并可用于任何应用程序。这是获得完整操作系统集成的唯一方法,否则您需要从头开始 - 编写自己的EditView。玩得开心,让一个看起来不错的东西显然是非平凡的。
此外,将输入类型设置为null不会禁用大多数键盘。它只是将它们置于哑模式并关闭预测之类的东西。
答案 3 :(得分:0)
我尝试了下面的答案并且有效,但请注意 1)EditText不能专注于初始化 2)当你的方向改变而用户的焦点在editText上时,弹出股票键盘,这是另一个“可解决的”问题。
在前面的回答中提到过这一点,但要注意你必须确保你的editText元素不会关注实例化:
https://code.google.com/p/android/issues/detail?id=27609#c7
#7 nyphb ... @ gmail.com
我终于找到了一个(对我而言)工作解决方案。
第一部分(在onCreate中):
mText.setInputType(InputType.TYPE_NULL);
if (android.os.Build.VERSION.SDK_INT >= 11 /*android.os.Build.VERSION_CODES.HONEYCOMB*/) {
// this fakes the TextView (which actually handles cursor drawing)
// into drawing the cursor even though you've disabled soft input
// with TYPE_NULL
mText.setRawInputType(InputType.TYPE_CLASS_TEXT);
}
此外,android:textIsSelectable需要设置为true(或在onCreate中设置),并且EditText不能专注于初始化。如果您的EditText是第一个可聚焦的视图(在我的情况下是它),您可以通过将它放在它上面来解决这个问题:
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" >
<requestFocus />
</LinearLayout>