Android编辑文本光标不显示

时间:2013-01-11 16:52:56

标签: android cursor android-edittext

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

editText.setInputType(InputType.TYPE_NULL);

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

4 个答案:

答案 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>