在我的Android应用程序中,我想要一个EditText
与android:editable="false"
,但光标闪烁。 “可编辑”设置为false后,光标闪烁似乎不起作用。禁用EditText的输入法,但保持光标闪烁
我只想使用我自己的键盘小部件(不是系统的软键盘),并保持光标闪烁。
有什么想法可以做到这一点吗?
在我的Android应用程序中,我想要一个EditText
与android:editable="false"
,但光标闪烁。 “可编辑”设置为false后,光标闪烁似乎不起作用。禁用EditText的输入法,但保持光标闪烁
我只想使用我自己的键盘小部件(不是系统的软键盘),并保持光标闪烁。
有什么想法可以做到这一点吗?
您可以使用XML属性
机器人:cursorVisible = “假”
或Java功能
setCursorVisible(假)。
,将工作
他希望光标可见。此外,我不认为这个代码工作,如果它是不可聚焦的。 – Eric
也许尝试留出的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 改变上述方法为s AY 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
进行测试,并有结果。
希望这会有所帮助。
谢谢,完美的作品。我在Nexus 4上,操作系统是6.0.1。就我而言,“步骤5”不是必需的。 –
只是为任何正在寻找和回答的人添加此方法。我已经尝试了很多方法,但只有这一个从我工作。
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()调用以下内容,但是这会影响所有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);
}
我最初发布了一个答案,使用'android:inputType =“none”'。但是,现在我想到了这一点,我认为这是不可能的。对于开发者来说,做出这样的事情是不可能的。我建议你用你自己的触摸监听器制作一个自定义的'TextView'类。 – Eric
你有任何问题可以通过为EditText设置TextWatcher来解决这个问题? –
Thanks @Eric,我查找TextView.shouldBlink()和TextView.onDraw(4.0.3)的源代码,并且光标闪烁的条件是“mMovement!= null &&(isFocused()|| isPressed()) “和isCursorVisible(),它真的需要制作一个自定义的TextView吗?或者我们可能有一个简单的方法? – heihei