我有一个使用内部ime的应用程序(意思是ime只是应用程序中的代码而不是真正的ime)。我使用这个ime面板输入/编辑editText。一切都很好,直到Froyo(我没有在Gingerbread下测试过)。但是,在Honeycomb上,我可以输入文本并对其进行编辑,但不会显示光标或文本高亮显示!有谁知道如何解决这个问题?我宁愿不把我的代码分成一个特殊的Honeycomb版本来解决这个问题。
我已经将xml cursorVisible元素显式设置为true,然后在代码中使用setCursorVisible将其设置为true,但这没有帮助。
谢谢!
答案 0 :(得分:7)
将这些属性添加到EditText中,使闪烁的光标变为黑色:
android:textColor="#000000"
android:textCursorDrawable="@null"
如果您使用Holo主题,则需要它。 来自:https://stackoverflow.com/a/9165217/1267112
答案 1 :(得分:0)
您可以尝试下面的代码片段。
public static void setCursorVisible(EditText editText, Context context) {
editText.setCursorVisible(true);
// sdk
// http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
if (android.os.Build.VERSION.SDK_INT >= 12) {// Android 3.1.x API12
// HONEYCOMB_MR1
String filedNameString = "mCursorDrawableRes";
// mCursorDrawableRes
Class<? extends EditText> editTextClass = editText.getClass();
Class<? extends TextView> textViewClass = null;
if (editTextClass != null) {
textViewClass = (Class<? extends TextView>) editTextClass
.getSuperclass();
}
if (textViewClass != null) {
Field mCursorDrawableField = null;
try {
mCursorDrawableField = textViewClass
.getDeclaredField(filedNameString);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
Log.i(TAG, "NoSuchFieldException");
e.printStackTrace();
}
if (mCursorDrawableField != null) {
mCursorDrawableField.setAccessible(true);
try {
mCursorDrawableField.set(editText, 0);
} catch (IllegalArgumentException e) {
Log.i(TAG, "IllegalArgumentException");
e.printStackTrace();
} catch (NotFoundException e) {
Log.i(TAG, "NotFoundException");
e.printStackTrace();
} catch (IllegalAccessException e) {
Log.i(TAG, "IllegalAccessException");
e.printStackTrace();
}
}
}
}