更新:实际上,这不是华硕手机的问题,这是华硕ZenUI键盘的问题。您可以安装自己喜欢的键盘来解决问题。我已经安装了Google键盘测试了Zenfone 2。我TextWatcher
中的所有内容都可以正常使用。但它不是错误修复或问题解决方案。
我的InputFilter
附加了两个TextWatcher
和一个EditText
。
InputFilters
:标准InputFilter.AllCaps()
过滤器和自定义'字母characetrs'。他们是神奇的。
TextWatcher
进行了一些文本转换(将符号从俄语翻译成英语)。 TextWatcher
也可以正常工作,但不适用于华硕手机(在Zenfone 4和5上测试过)。 Nexus 5,Genymotion模拟器和三星设备都可以。
问题是华硕手机不允许输入多个符号。可能是TextWatcher
或setSelection()
出现问题(禁用TextWatcher
时,一切正常。
列出TextView
:
etCardholder.setFilters(new InputFilter[]{new InputFilter.AllCaps(), new NameInputeFilter(false)});
twTransliterator = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etCardholder.removeTextChangedListener(twTransliterator);
etCardholder.setText(StringTools.transliterateCharacterRuToEn(s.toString()));
etCardholder.addTextChangedListener(twTransliterator);
}
@Override
public void afterTextChanged(Editable s) {
etCardholder.setSelection(etCardholder.getText().length());
validateCardData();
}
};
etCardholder.addTextChangedListener(twTransliterator);
我尝试过不用setSelection()
设置光标的位置,而是使用append()
。这里结果相同。
你有什么想法可能吗?以及如何绕过它?
答案 0 :(得分:2)
我找到了解决此问题的方法,我的情况是EditText上的inputType属性带有以下参数:textCapCharacters,我使用textNoSuggestions进行解析。您也可以将两者与管道运算符'|'一起使用。
let isBlack = true;
function animate() {
$(".someDiv").animate({
backgroundColor: isBlack ? "transparent" : 'black'
}, 20);
isBlack = !isBlack;
}
const delay = ms => new Promise(res => setTimeout(res, ms));
async function animateAndWait(msArr) {
for (let i = 0; i < msArr.length; i++) {
animate();
await delay(msArr[i]);
}
}
flashFunction();
async function flashFunction() {
await animateAndWait([300, 50]);
if (myRandomNumberBetween(1, 100) <= 10) {
return delay(3000)
.then(flashFunction);
}
await animateAndWait([300, 400]);
delay(3000)
.then(flashFunction);
}
答案 1 :(得分:1)
面向未来的Google员工!
该错误来自问题所提及的华硕ZenUI的键盘。 @Gabriel Correra建议的解决方法完全解决了这个问题, 但是,您可能不想为所有用户设置此标志,因为不是每个人都在使用该越野车键盘。
使用此代码片段,您可以确定用户的默认键盘是否为Asus ZenUI's keyboard
,如果是,则以编程方式添加上述标记,并让其他用户喜欢他们的建议!
String def = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
if(def.equals("com.asus.ime/.IME")) {
setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
}