11

在我的应用程序中,我使用以下代码禁用了键盘(我现在使用我的自定义键盘):

editText.setInputType(InputType.TYPE_NULL);

现在,我的问题是文本光标不再出现在编辑文本中。我该怎么办?任何建议将不胜感激。

4

4 回答 4

23

在错误跟踪器中打开了一个问题 在错误跟踪中为此打开了一个问题。其中一位用户建议了适用于“大多数”设备的方法。

简而言之,您所要做的就是调用:

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);

为您的EditText视图(在您调用后editText.setInputType(InputType.TYPE_NULL);)。

您可能还应该设置:

editText.setTextIsSelectable(true);

以便选择文本(尽管 in 似乎不适用于三星 Galaxy SIII)。此方法仅从HONEYCOMB (api11) 开始可用,因此在为较旧的 Android 版本开发时请记住这一点。

还声明您的EditText不应该是活动开始时接收焦点的第一个视图(如果是 - 只是来自另一个视图的 requestFocus() )。虽然我(个人)没有遇到任何问题。

于 2013-02-06T15:16:13.010 回答
0

为什么不为您的自定义键盘使用自定义视图,而不是实现一个成熟的 IME?这将解决您的光标问题,甚至可以使您的键盘在您的应用程序之外可用(如果您愿意)。

如果您想这样做,这个答案有几个有用的链接: 如何为 Android 开发软键盘?

于 2013-01-11T17:12:12.487 回答
0

我真的不建议这样做。编写一个好的完整的 IME 真的很难。此外,用户开始期待他们的键盘提供的功能(自动更正、Swyping、下一个单词预测、更改语言的能力),除非您在键盘本身上花费数月时间,否则您不会拥有这些功能。任何不允许我使用 Swype 的应用程序都会立即被删除(偏见说明:我在 Swype android 上工作)。

但是,如果您想作为键盘与操作系统完全集成,您将不得不编写一个 InputMethodService。然后,用户可以在键盘选择菜单中选择您的键盘,并可用于任何应用程序。这是获得完整操作系统集成的唯一方法,否则您将需要真正从头开始——编写自己的 EditView。玩得开心,得到一个看起来不错的东西绝对不是微不足道的。

此外,设置输入类型 null 不会禁用大多数键盘。它只是将它们置于哑模式并关闭预测之类的功能。

于 2013-01-11T17:19:56.790 回答
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>
于 2015-08-02T13:23:14.583 回答