我希望文本框在用户单击后自动指向文本的结尾。这在使用setSelection之前是有效的,但是由于某种原因它停止了工作。现在,光标指向用户单击的位置。
HMTL:
<TextField text="the cursor should point at the end when clicked" (focus)="onFocus($event.object)"> </TextField>
TS:
public onFocus(textfield): void {
textfield.android.setSelection(textfield.text.length)
}
如果我将它包装在一个超时中,它可以工作,但是在光标移动之前会闪烁,这让我不太满意。我还做了一个playground example
在此先感谢您的帮助!
答案 0 :(得分:0)
它似乎按预期工作。请记住,在Android上的焦点是将光标放在TextField上。如果按后退按钮隐藏键盘,然后在TextField上单击任意位置以再次显示键盘,则不会再次触发焦点事件。
当我点击TextField时,它将光标指向TextField的末尾,如果再次点击同一TextField则不会。但是,如果我点击第二个TextField,那么它将在那里按预期工作,因为焦点现在从第一个TextField转移到了第二个。
如果仍然有问题,请共享设备的操作系统版本,以及可能显示问题的GIF。
答案 1 :(得分:0)
好的,我找到了解决方案。这有点骇人听闻,但对我有用。与setTimeout的主要区别在于,它不会在移动光标之前“闪烁”。
好吧,所以我的解决方案是:我在文本字段内使用条件CSS类,具体取决于文本字段是否聚焦。一旦文本字段准备就绪,这将导致生命周期挂钩再运行一次(至少我认为这是正在发生的事情。)
这是我的代码: HTML:
#checkout-menu-icon sub {
vertical-align: middle;
}
CSS:
<TextField [class.default-padding]="isFocused" text="the cursor should point at the end when clicked" (focus)="onFocus($event.object)" (blur)="onBlur()"> </TextField>
}
TS:
.default-padding {
/* This is just a dummy value. You can use any other padding or margin or
anything that will cause the hooks to re-render*/
padding-right: 0;