在我的应用程序中,我使用以下代码禁用了键盘(我现在使用我的自定义键盘):
editText.setInputType(InputType.TYPE_NULL);
现在,我的问题是文本光标不再出现在编辑文本中。我该怎么办?任何建议将不胜感激。
在我的应用程序中,我使用以下代码禁用了键盘(我现在使用我的自定义键盘):
editText.setInputType(InputType.TYPE_NULL);
现在,我的问题是文本光标不再出现在编辑文本中。我该怎么办?任何建议将不胜感激。
在错误跟踪器中打开了一个问题 在错误跟踪器中为此打开了一个问题。其中一位用户建议了适用于“大多数”设备的方法。
简而言之,您所要做的就是调用:
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
为您的EditText视图(在您调用后editText.setInputType(InputType.TYPE_NULL);
)。
您可能还应该设置:
editText.setTextIsSelectable(true);
以便选择文本(尽管 in 似乎不适用于三星 Galaxy SIII)。此方法仅从HONEYCOMB (api11) 开始可用,因此在为较旧的 Android 版本开发时请记住这一点。
还声明您的EditText不应该是活动开始时接收焦点的第一个视图(如果是 - 只是来自另一个视图的 requestFocus() )。虽然我(个人)没有遇到任何问题。
为什么不为您的自定义键盘使用自定义视图,而不是实现一个成熟的 IME?这将解决您的光标问题,甚至可以使您的键盘在您的应用程序之外可用(如果您愿意)。
如果您想这样做,这个答案有几个有用的链接: 如何为 Android 开发软键盘?
我真的不建议这样做。编写一个好的完整的 IME 真的很难。此外,用户开始期待他们的键盘提供的功能(自动更正、Swyping、下一个单词预测、更改语言的能力),除非您在键盘本身上花费数月时间,否则您不会拥有这些功能。任何不允许我使用 Swype 的应用程序都会立即被删除(偏见说明:我在 Swype android 上工作)。
但是,如果您想作为键盘与操作系统完全集成,您将不得不编写一个 InputMethodService。然后,用户可以在键盘选择菜单中选择您的键盘,并可用于任何应用程序。这是获得完整操作系统集成的唯一方法,否则您将需要真正从头开始——编写自己的 EditView。玩得开心,得到一个看起来不错的东西绝对不是微不足道的。
此外,设置输入类型 null 不会禁用大多数键盘。它只是将它们置于哑模式并关闭预测之类的功能。
我尝试了以下答案并且它有效,但请注意 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>