diff --git a/src/Android/Avalonia.Android/AndroidInputMethod.cs b/src/Android/Avalonia.Android/AndroidInputMethod.cs index 60f56805d1..b6c1154455 100644 --- a/src/Android/Avalonia.Android/AndroidInputMethod.cs +++ b/src/Android/Avalonia.Android/AndroidInputMethod.cs @@ -150,6 +150,13 @@ namespace Avalonia.Android _inputConnection.Editable.Replace(diff.index, editableText.Length, diff.diff); _inputConnection.EditableWrapper.IgnoreChange = false; + + if(diff.index == 0) + { + var selection = _client.Selection; + _client.Selection = new TextSelection(selection.Start, 0); + _client.Selection = selection; + } } (int index, string diff) GetDiff() diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 3b2a3657b3..a6e8d10777 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -571,8 +571,15 @@ namespace Avalonia.Android.Platform.SkiaPlatform BeginBatchEdit(); _commitInProgress = true; + var composingRegion = _editable.CurrentComposition; + var ret = base.CommitText(text, newCursorPosition); + if(composingRegion.Start != -1) + { + InputMethod.Client.Selection = composingRegion; + } + var committedText = text.SubSequence(0, text.Length()); if (_inputMethod.IsActive)