【发布时间】:2021-10-02 06:48:09
【问题描述】:
我想在 Xamarin 表单应用程序中禁用我的 Entry 控件 的复制/粘贴选项。为此,我正在使用 自定义渲染器。目前的解决方案适用于除 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 中被禁用,但仍然出现 蓝色圆点。点击它仍然会显示复制/粘贴选项。它仅在 Redmi note 8 中发生。在我的代码中,除了 OnDestroyActionMode 之外,没有其他回调受到影响,我无法执行 menu.Clear。在其他设备中,使用此代码会禁用该选项
Control.SetTextIsSelectable(false);
这就是它在 Redmi Note 8 设备中的显示方式。
我参考了这些链接,因为这个问题与我的非常相似,但它没有帮助。
EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event
如图所示,粘贴选项显示在设备中。我不知道如何修复这个错误有什么建议吗?
【问题讨论】:
-
这个设备是什么安卓版本?您可能需要使用不同的 API 来禁用将导致您使用条件编译
#IF __LOLLIPOP__....#ELIF __PIE__的行为。它是否与其他设备的版本相同,如果是这样,我会尝试为该版本寻找合适的 API,因为事情确实会发生变化并被弃用等
标签: android xamarin xamarin.forms miui redmi-device