在Honeycomb下的editText中没有光标

时间:2011-04-29 20:54:10

标签: android android-edittext android-3.0-honeycomb

我有一个使用内部ime的应用程序(意思是ime只是应用程序中的代码而不是真正的ime)。我使用这个ime面板输入/编辑editText。一切都很好,直到Froyo(我没有在Gingerbread下测试过)。但是,在Honeycomb上,我可以输入文本并对其进行编辑,但不会显示光标或文本高亮显示!有谁知道如何解决这个问题?我宁愿不把我的代码分成一个特殊的Honeycomb版本来解决这个问题。

我已经将xml cursorVisible元素显式设置为true,然后在代码中使用setCursorVisible将其设置为true,但这没有帮助。

谢谢!

2 个答案:

答案 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();
                }
            }

        }
    }