在我的android应用程序中,我想要一个EditText但光标闪烁的android:editable="false"。“可编辑”设置为false后,光标闪烁似乎不起作用。
我只想使用我自己的键盘小部件(不是系统的软键盘),并保持光标闪烁。
有什么办法使这成为可能吗?

最佳答案

也许试着完全去掉xml属性android:editable,然后结合下面的内容
保持光标闪烁并防止触摸事件弹出本机输入法(键盘)。

/*customized edittext class
* for being typed in by private-to-your-app custom keyboard.
* borrowed from poster at http://stackoverflow.com/questions/4131448/android-how-to-turn-off-ime-for-an-edittext
*/
public class EditTextEx extends EditText {
    public EditTextEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onCheckIsTextEditor() {

        return false; //for some reason False leads to cursor never blinking or being visible even if setCursorVisible(true) was called in code.
    }
}

步骤2
将上面的方法改为return true;
步骤3
向上述类中添加另一个方法。
@Override
public boolean isTextSelectable(){
    return true;
}

步骤4
在这个类的实例被实例化并调用的另一个位置,我添加了一个新的touch事件处理程序
    viewB.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            viewB.setCursorVisible(true);
            return false;
        }
    });

步骤5检查以确保XML和/或EditText实例化代码将IME/键盘类型声明为“none”。我没有确认相关性,但我也使用下面的可聚焦属性。
<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属性。我的代码使用它们,在viewB中进行测试,并得到结果。
希望这有帮助。

10-04 10:32