在我的Android应用程序中,我想要EditText
android:editable="false"
但光标闪烁。 “editable”设置为false后,光标闪烁似乎不起作用。
我只想使用自己的键盘小部件(不是系统的软键盘),并保持光标闪烁。
有什么想法可以做到这一点吗?
答案 0 :(得分: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.
}
}
第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
中进行测试,并且有结果。
希望这有帮助。
答案 1 :(得分:0)
您可以使用xml属性
机器人:cursorVisible = “假”
或java函数
setCursorVisible(假)。
它会起作用
答案 2 :(得分: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);
}
}
答案 3 :(得分: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);
}