Как отключить опцию копирования/вставки формы Xamarin Entry Control на устройстве Redmi note 8?

Я хочу отключить параметр копирования/вставки моего элемента управления вводом в приложении форм Xamarin. Для этого я использую пользовательский рендерер. Текущее решение работает на всех остальных устройствах, кроме 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: отключить всплывающее меню "Вставить/Заменить" в событии щелчка обработчика выбора текста

Как вы можете видеть на изображении, на устройстве отображается опция вставки. Я понятия не имею, как исправить эту ошибку, какие-либо предложения?


person Judson Abraham    schedule 26.07.2021    source источник
comment
Какая версия андроида у этого устройства? Возможно, вам придется использовать другой API, чтобы отключить поведение, которое приведет к использованию условной компиляции #IF __LOLLIPOP__ .... #ELIF __PIE__. Является ли это той же версией, что и другие устройства, если да, я бы попытался найти соответствующий API для этой версии, поскольку все меняется и устаревает и т. д.   -  person Axemasta    schedule 26.07.2021


Ответы (1)


Я нашел два решения для этого. Один из них — очистка буфера обмена, а другой — настройка варианта ввода как видимого пароля. Оба эти решения служат моей цели. Для очистки буфера обмена вы можете использовать следующий код в вашем рендерере

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

А для настройки варианта ввода как видимого пароля вы можете использовать следующий код

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

Итак, это решения, которые были полезны для меня.

person Judson Abraham    schedule 03.08.2021