Android Nativescript vue将光标设置在TextInput RTL的末尾

Android Nativescript vue将光标设置在TextInput RTL的末尾,android,nativescript,nativescript-vue,Android,Nativescript,Nativescript Vue,我试图通过编程将光标设置在文本字段的末尾,以模拟RTL文本输入 我的文本字段组件: 我放了一块手表,它有“面具”的魔力: 值(val){ 设v=parseFloat(val.replace(“R$”,'')。replace(/\./g',)。replace(',',')); this.value_to_btc=(v/parseFloat(appSettings.getString('ticker')).formatMoney('btc',6',',','0); if(val&&this.che

我试图通过编程将光标设置在文本字段的末尾,以模拟RTL文本输入

我的文本字段组件:

我放了一块手表,它有“面具”的魔力:

值(val){
设v=parseFloat(val.replace(“R$”,'')。replace(/\./g',)。replace(',','));
this.value_to_btc=(v/parseFloat(appSettings.getString('ticker')).formatMoney('btc',6',',','0);
if(val&&this.check_值){
设值=val;
值=值。替换(/\D/g');
如果(value.length==3){
value=value.replace(/(\d{1})(\d{2})/,“$1,$2”);
}else if(value.length==4){
value=value.replace(/(\d{2})(\d{2})/,“$1,$2”);
}else if(value.length==5){
value=value.replace(/(\d{3})(\d{2})/,“$1,$2”);
}else if(value.length==6){
value=value.replace(/(\d{1})(\d{3})(\d{2})/,“$1.$2,$3”);
}else if(value.length==7){
value=value.replace(/(\d{2})(\d{3})(\d{2})/,“$1.$2,$3”);
}else if(value.length==8){
value=value.replace(/(\d{3})(\d{3})(\d{2})/,“$1.$2,$3”);
}else if(value.length==9){
value=value.replace(/(\d{1})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
}else if(value.length==10){
value=value.replace(/(\d{2})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
}else if(value.length==11){
value=value.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
}else if(value.length==12){
value=value.replace(/(\d{1})(\d{3})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3.$4,$5”);
}否则{
value=value.replace(/(\d{10,})(\d{2})/,“$1.$2”);
}
this.value=“R$”+值;
}
this.check\u value=!this.check\u value;//这是为了防止监视回调
if(isAndroid){
console.log(this.value.length-1);
this.$refs.value_field.nativeView.android.setSelection(this.value.length-1)
}
}   
问题应该出现在该块中:

if(isAndroid){
console.log(this.value.length-1);
this.$refs.value_field.nativeView.android.setSelection(this.value.length-1)
}
this.value.length
返回大于或等于0的整数值。但是下一行(
this.$refs.value\u field.nativeView.android.setSelection(this.value.length-1)
)应该将光标设置到特定索引,该索引是我输入的大小-1


但它总是转到我文本字段的0位置。我遗漏了什么?

嗯,找到了解决办法。玩了两个把戏

  • 从手表中移出并设置为@textChange事件
  • 在输入结束后添加空格,以便将光标设置在最后一个数字后面
  • 我的文本字段组件:

    我的新方法
    setToEnd
    方法:

    setToEnd:函数(事件){
    设v=parseFloat(this.value.replace(“R$”,“”).replace(/\./g,).replace(“,”,”);
    this.value_to_btc=(v/parseFloat(appSettings.getString('ticker')).formatMoney('btc',6',',','0);
    设value=this.value;
    值=值。替换(/\D/g');
    如果(value.length==3){
    value=value.replace(/(\d{1})(\d{2})/,“$1,$2”);
    }else if(value.length==4){
    value=value.replace(/(\d{2})(\d{2})/,“$1,$2”);
    }else if(value.length==5){
    value=value.replace(/(\d{3})(\d{2})/,“$1,$2”);
    }else if(value.length==6){
    value=value.replace(/(\d{1})(\d{3})(\d{2})/,“$1.$2,$3”);
    }else if(value.length==7){
    value=value.replace(/(\d{2})(\d{3})(\d{2})/,“$1.$2,$3”);
    }else if(value.length==8){
    value=value.replace(/(\d{3})(\d{3})(\d{2})/,“$1.$2,$3”);
    }else if(value.length==9){
    value=value.replace(/(\d{1})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
    }else if(value.length==10){
    value=value.replace(/(\d{2})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
    }else if(value.length==11){
    value=value.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3,$4”);
    }else if(value.length==12){
    value=value.replace(/(\d{1})(\d{3})(\d{3})(\d{3})(\d{2})/,“$1.$2.$3.$4,$5”);
    }否则{
    value=value.replace(/(\d{10,})(\d{2})/,“$1.$2”);
    }
    this.value=“R$”+value+”;
    if(isAndroid){
    this.$refs.value_field.nativeView.android.setSelection(this.value.length-1);
    }
    }
    

    这两个变化成功了。希望它能帮助别人。

    您正在使用哪种设备进行测试?你能分享一个可以复制这个问题的游乐场样本吗?