Android 禁用EditText的输入方法,但保持光标闪烁

Android 禁用EditText的输入方法,但保持光标闪烁,android,android-widget,Android,Android Widget,在我的Android应用程序中,我希望使用Android:editable=“false”的EditText,但光标会闪烁。“可编辑”设置为false后,光标闪烁似乎不起作用 我只想使用我自己的键盘小部件(不是系统的软键盘),并保持光标闪烁 有什么办法可以做到这一点吗?您可以使用xml属性 android:cursorVisible=“false” 或者java函数 setCursorVisible(错误) 它将起作用也许可以尝试完全省略xml属性android:editable,然后结合使用以

在我的Android应用程序中,我希望使用
Android:editable=“false”
EditText
,但光标会闪烁。“可编辑”设置为false后,光标闪烁似乎不起作用

我只想使用我自己的键盘小部件(不是系统的软键盘),并保持光标闪烁


有什么办法可以做到这一点吗?

您可以使用xml属性

android:cursorVisible=“false”

或者java函数

setCursorVisible(错误)


它将起作用

也许可以尝试完全省略xml属性
android:editable
,然后结合使用以下方法

保持光标闪烁并防止触摸事件弹出本机输入法(键盘)

步骤2 将上述方法更改为
返回true

步骤3 向上述类添加另一个方法

@Override
public boolean isTextSelectable(){
    return true;
}
步骤4 在这个类的实例被实例化并被称为
viewB
的另一个位置,我添加了一个新的触摸事件处理程序

    viewB.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            viewB.setCursorVisible(true);
            return false;
        }
    });
步骤5检查以确保XML和/或EditText实例化代码将IME/键盘类型声明为“无”。我没有确认相关性,但我也在使用下面的可聚焦属性

<questionably.maybe.too.longofa.packagename.EditTextEx
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:inputType="none">

抱歉,有这么多xml属性。我的代码使用了它们,在
4.2.1
中进行了测试,并得到了结果


希望这能有所帮助。

只需为寻找答案的人添加此方法即可。我尝试过很多方法,但只有这一种对我有效

 public static void disableSoftKeyboard(final EditText v) {
    if (Build.VERSION.SDK_INT >= 11) {
        v.setRawInputType(InputType.TYPE_CLASS_TEXT);
        v.setTextIsSelectable(true);
    } else {
        v.setRawInputType(InputType.TYPE_NULL);
        v.setFocusable(true);
    }
}

我从onCreate()调用了以下内容,但这会影响所有EditText

private void hideKeyboard ()
{
    getWindow ().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    getWindow ().setFlags (WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                           WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}

他希望光标可见。此外,我认为如果这段代码不可聚焦,它将无法工作。我最初发布了一个答案,使用的是
android:inputType=“none”
。然而,现在我想到了这一点,我认为这是不可能的。对于开发人员来说,让这样的事情成为可能并没有多大意义。我建议您使用自己的touch listener定制一个
TextView
类。您可以通过设置EditText的
TextWatcher
来解决此问题??谢谢@Eric,我查找TextView.shouldBlink()和TextView.onDraw(4.0.3)的源代码,光标闪烁的条件是“mMovement!”=null&(isFocused())| | isPressed())和isCursorVisible(),它真的需要定制文本视图吗?或者我们可以有一个简单的方法?我真的不确定有什么简单的方法。从谷歌的角度来看,如果用户无法通过键盘进行交互,光标闪烁是没有任何意义的。我唯一一次看到像这样的定制键盘是在《游戏精神》中,它使用了某种定制的
EditText
。谢谢,效果非常好。我在Nexus4上,操作系统是6.0.1。在我的情况下,不需要执行步骤5。
private void hideKeyboard ()
{
    getWindow ().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    getWindow ().setFlags (WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                           WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}