4

在我的 Android 应用程序中,我想要一个EditTextwithandroid:editable="false"但光标闪烁。“可编辑”设置为 false 后,光标闪烁似乎不起作用。

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

有什么想法可以让这成为可能吗?

4

4 回答 4

4

也许尝试完全省略 xml 属性android:editable,然后尝试以下组合

保持光标闪烁防止触摸事件弹出本机 IME(键盘)..

/*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.
    }       
}

step 2 把上面的方法改成说 return 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,并有结果。

希望这可以帮助。

于 2014-02-11T00:12:37.167 回答
0

您可以使用 xml 属性

机器人:cursorVisible="假"

或java函数

设置游标可见(假)。

它会起作用的

于 2012-10-13T06:28:57.960 回答
0

只需为任何寻找和回答的人添加此方法。我尝试了很多方法,但只有这一种对我有用。

 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);
    }
}
于 2014-05-27T21:51:48.687 回答
0

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

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);
}
于 2017-11-17T21:15:11.157 回答