最近在做项目,遇到一个需求,有一个文本框(EditText)存储重量信息,重量信息来源于蓝牙电子秤,所以禁止用户手工输入。
如下图,回收物重量,能正常点击并出现光标,但是不会弹出软键盘
实现
定义一个常量类
/**
* Description: 反射方法名
*
* @author : laughing
* DateTime: 2021-01-07 13:11
*/
public class ReflectMethodConstants {
public static String SET_SHOW_SOFT_INPUT_ON_FOCUS = "setShowSoftInputOnFocus";
public static String SET_SOFT_INPUT_SHOWN_ON_FOCUS = "setSoftInputShownOnFocus";
}
反射设置控件
//禁止弹出软键盘
Class<EditText> cls = EditText.class;
Method method;
try {
method = cls.getMethod(ReflectMethodConstants.SET_SHOW_SOFT_INPUT_ON_FOCUS, boolean.class);
method.setAccessible(true);
method.invoke(viewHolder.textViewWeight, false);
} catch (Exception ignored) {
}
try {
method = cls.getMethod(ReflectMethodConstants.SET_SOFT_INPUT_SHOWN_ON_FOCUS, boolean.class);
method.setAccessible(true);
method.invoke(viewHolder.textViewWeight, false);
} catch (Exception ignored) {
}
//禁止键盘输入
viewHolder.textViewWeight.setFilters(new InputFilter[]{
(source, start, end, dest, dStart, dEnd) -> {
if (source.length() > 1) {
return source;
}
return "";
}
});
可以使用
感谢分享