PopupWindow中屏蔽软键盘,editText光标消失问题

时间:2022-04-15 08:55:46
PopupWindow布局中含有一个EditText,在EditText的onclick事件中,我设置了弹出自己布局的键盘,并用editText.setInputType(InputType.TYPE_NULL)来屏蔽了系统自带的键盘。。。
        这个时候出现问题了,当我点击EditText的时候,可以用我的键盘写入数据,但是EditText没有光标。各种方法试过了,像editText.requseFocos()和editText.setCursorVisible(true).光标都没办法调出来。
        有哪位好心,热心,真心的大哥大姐抽空给看看啊

5 个解决方案

#1


它可能是光标和系统键盘的输入绑定在一起了

editText.setInputType(InputType.TYPE_NULL) 这句也暗含着屏蔽了光标了吧?

示例代码有吗?不清楚你什么环境

#2


嗯 你试试这个可以不:android:editable="false"

#3


4.0上确实有这情况,我也在纠结这问题,不知楼主解决没有?

#4


不知道楼主解决了没有 我也遇到这问题了

#5



用这个方法关闭系统键盘就不会出现光标消失的问题了

// 隐藏系统键盘

public void hideSoftInputMethod(EditText ed){

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 



int currentVersion = android.os.Build.VERSION.SDK_INT;

String methodName = null;

if(currentVersion >= 16){

// 4.2

methodName = "setShowSoftInputOnFocus";

}

else if(currentVersion >= 14){

// 4.0

methodName = "setSoftInputShownOnFocus";

}



if(methodName == null){

ed.setInputType(InputType.TYPE_NULL);  

}

else{

            Class<EditText> cls = EditText.class;  

            Method setShowSoftInputOnFocus;  

            try {

setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class);

setShowSoftInputOnFocus.setAccessible(true);  

            setShowSoftInputOnFocus.invoke(ed, false); 

} catch (NoSuchMethodException e) {

ed.setInputType(InputType.TYPE_NULL);

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

}  

}

#1


它可能是光标和系统键盘的输入绑定在一起了

editText.setInputType(InputType.TYPE_NULL) 这句也暗含着屏蔽了光标了吧?

示例代码有吗?不清楚你什么环境

#2


嗯 你试试这个可以不:android:editable="false"

#3


4.0上确实有这情况,我也在纠结这问题,不知楼主解决没有?

#4


不知道楼主解决了没有 我也遇到这问题了

#5



用这个方法关闭系统键盘就不会出现光标消失的问题了

// 隐藏系统键盘

public void hideSoftInputMethod(EditText ed){

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 



int currentVersion = android.os.Build.VERSION.SDK_INT;

String methodName = null;

if(currentVersion >= 16){

// 4.2

methodName = "setShowSoftInputOnFocus";

}

else if(currentVersion >= 14){

// 4.0

methodName = "setSoftInputShownOnFocus";

}



if(methodName == null){

ed.setInputType(InputType.TYPE_NULL);  

}

else{

            Class<EditText> cls = EditText.class;  

            Method setShowSoftInputOnFocus;  

            try {

setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class);

setShowSoftInputOnFocus.setAccessible(true);  

            setShowSoftInputOnFocus.invoke(ed, false); 

} catch (NoSuchMethodException e) {

ed.setInputType(InputType.TYPE_NULL);

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

}  

}