--- /dev/null
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Github, 7773, "[Android] Can not set Entry cursor position by tapping if ClearButtonVisibility=WhenEditing", PlatformAffected.Android)]
+ public class Issue7773 : TestContentPage
+ {
+ protected override void Init()
+ {
+ var stack = new StackLayout
+ {
+ Children = {
+ new Entry
+ {
+ Margin = new Thickness(50),
+ HorizontalOptions = LayoutOptions.FillAndExpand,
+ ClearButtonVisibility = ClearButtonVisibility.WhileEditing,
+ Text = "ClearButtonVisibility"
+ },
+ new Entry
+ {
+ HorizontalOptions = LayoutOptions.FillAndExpand,
+ ClearButtonVisibility = ClearButtonVisibility.WhileEditing,
+ Text = "ClearButtonVisibility2"
+ },
+ }
+ };
+
+ Content = stack;
+ }
+ }
+}
\ No newline at end of file
<Compile Include="$(MSBuildThisFileDirectory)CollectionViewHeaderFooterView.cs" />
<Compile Include="$(MSBuildThisFileDirectory)CollectionViewItemsUpdatingScrollMode.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue8177.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)Issue7773.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue8186.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue3475.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Issue5354.xaml.cs">
formsEditContext.SelectionChanged -= SelectionChanged;
ListenForCloseBtnTouch(false);
}
+ _clearBtn = null;
}
base.Dispose(disposing);
// Entry clear button management
public abstract partial class EntryRendererBase<TControl>
{
+ Drawable _clearBtn;
internal override void OnNativeFocusChanged(bool hasFocus)
{
base.OnNativeFocusChanged(hasFocus);
void EditTextTouched(object sender, TouchEventArgs e)
{
- MotionEvent me = e.Event;
- if (me.Action == MotionEventActions.Up && me.RawX >= EditText.Right - EditText.CompoundPaddingRight)
- EditText.Text = null;
+ e.Handled = false;
+ var me = e.Event;
+
+ var rBounds = _clearBtn?.Bounds;
+ if (rBounds != null)
+ {
+ var x = me.GetX();
+ var y = me.GetY();
+ if (me.Action == MotionEventActions.Up
+ && x >= (EditText.Right - rBounds.Width())
+ && x <= (EditText.Right - EditText.PaddingRight)
+ && y >= EditText.PaddingTop
+ && y <= (EditText.Height - EditText.PaddingBottom))
+ {
+ EditText.Text = null;
+ e.Handled = true;
+ }
+ }
}
void UpdateClearBtnOnElementChanged()
{
Drawable d = showClearButton && (Element.Text?.Length > 0) ? GetCloseButtonDrawable() : null;
EditText.SetCompoundDrawablesWithIntrinsicBounds(null, null, d, null);
+ _clearBtn = d;
}
protected virtual Drawable GetCloseButtonDrawable()