如何在 Redmi note 8 设备中禁用 Xamarin forms Entry 控件的 copy/paste 选项?
How to Disable copy/paste option of Xamarin forms Entry control in Redmi note 8 device?
我想在 Xamarin 表单应用程序中禁用我的条目控件的copy/paste选项。为此,我正在使用 custom renderer。当前解决方案适用于除 Redmi Note 8 之外的所有其他设备。这是我的渲染器代码。
class MyEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.CustomSelectionActionModeCallback = new Callback();
Control.CustomInsertionActionModeCallback = new Callback();
Console.WriteLine("CustomSelectionActionModeCallback");
Control.SetTextIsSelectable(false);
Control.LongClickable = false;
}
}
}
public class Callback : Java.Lang.Object, ActionMode.ICallback
{
public bool OnActionItemClicked(ActionMode mode, IMenuItem item)
{
Console.WriteLine("OnActionItemClicked");
return true;
}
public bool OnCreateActionMode(ActionMode mode, IMenu menu)
{
Console.WriteLine("OnCreateActionMode");
menu.Clear();
return false;
}
public void OnDestroyActionMode(ActionMode mode) {
Console.WriteLine("OnDestroyActionMode");
}
public bool OnPrepareActionMode(ActionMode mode, IMenu menu)
{
Console.WriteLine("OnPrepareActionMode");
menu.Clear();
menu.Close();
return true;
}
}
}
所以长按在Redmi Note 8中被禁用但仍然出现蓝色圆点。单击它仍然显示 copy/paste 选项。 仅在 Redmi note 8 中出现。在我的代码中,除了 OnDestroyActionMode 之外没有其他回调被触发,我无法执行 menu.Clear。在其他设备中,该选项通过使用此代码被禁用
Control.SetTextIsSelectable(false);
这是它在 Redmi Note 8 设备.
中的显示方式
我参考了这些链接,因为这个问题与我的非常相似,但没有帮助。
Disable EditText context menu
如图所示,设备中显示粘贴选项。我不知道如何修复这个错误有什么建议吗?
我找到了两个解决方案。一个是清除剪贴板,另一个是将输入的变体设置为可见密码。这两种解决方案都符合我的目的。对于清除剪贴板,您可以在渲染器中使用以下代码
var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
clipboardManager.ClearPrimaryClip();
而对于将输入的变体设置为可见密码,您可以使用以下代码
Control.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationVisiblePassword;
所以这些是对我有用的解决方案。
我想在 Xamarin 表单应用程序中禁用我的条目控件的copy/paste选项。为此,我正在使用 custom renderer。当前解决方案适用于除 Redmi Note 8 之外的所有其他设备。这是我的渲染器代码。
class MyEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.CustomSelectionActionModeCallback = new Callback();
Control.CustomInsertionActionModeCallback = new Callback();
Console.WriteLine("CustomSelectionActionModeCallback");
Control.SetTextIsSelectable(false);
Control.LongClickable = false;
}
}
}
public class Callback : Java.Lang.Object, ActionMode.ICallback
{
public bool OnActionItemClicked(ActionMode mode, IMenuItem item)
{
Console.WriteLine("OnActionItemClicked");
return true;
}
public bool OnCreateActionMode(ActionMode mode, IMenu menu)
{
Console.WriteLine("OnCreateActionMode");
menu.Clear();
return false;
}
public void OnDestroyActionMode(ActionMode mode) {
Console.WriteLine("OnDestroyActionMode");
}
public bool OnPrepareActionMode(ActionMode mode, IMenu menu)
{
Console.WriteLine("OnPrepareActionMode");
menu.Clear();
menu.Close();
return true;
}
}
}
所以长按在Redmi Note 8中被禁用但仍然出现蓝色圆点。单击它仍然显示 copy/paste 选项。 仅在 Redmi note 8 中出现。在我的代码中,除了 OnDestroyActionMode 之外没有其他回调被触发,我无法执行 menu.Clear。在其他设备中,该选项通过使用此代码被禁用
Control.SetTextIsSelectable(false);
这是它在 Redmi Note 8 设备.
中的显示方式我参考了这些链接,因为这个问题与我的非常相似,但没有帮助。
Disable EditText context menu
如图所示,设备中显示粘贴选项。我不知道如何修复这个错误有什么建议吗?
我找到了两个解决方案。一个是清除剪贴板,另一个是将输入的变体设置为可见密码。这两种解决方案都符合我的目的。对于清除剪贴板,您可以在渲染器中使用以下代码
var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
clipboardManager.ClearPrimaryClip();
而对于将输入的变体设置为可见密码,您可以使用以下代码
Control.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationVisiblePassword;
所以这些是对我有用的解决方案。