4

我想在 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 上下文菜单

EditText:禁用文本选择处理程序单击事件上的粘贴/替换菜单弹出

正如您在图像中看到的,粘贴选项正在设备中显示。我不知道如何修复这个错误有什么建议吗?

4

1 回答 1

1

我为此找到了两种解决方案。一种是清除剪贴板,另一种是将输入的变化设置为可见密码。这两种解决方案都符合我的目的。要清除剪贴板,您可以在渲染器中使用以下代码

var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
clipboardManager.ClearPrimaryClip();

并且要将输入的变化设置为可见密码,您可以使用以下代码

Control.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextVariationVisiblePassword;

所以这些是对我有用的解决方案。

于 2021-08-03T05:34:02.180 回答