Как мне включить копирование / вставку / Выбрать все меню в редакторе MaterialEditorRenderer

#c# #android #xamarin #xamarin.forms #xamarin.android

#c# #Android #xamarin #xamarin.forms #xamarin.android

Вопрос:

Я использую формы Xamarin для отображения редактора, который допускает многострочный текст. Однако, когда я долго нажимаю в окне редактора, когда в нем уже более 1 строки текста, меню для выбора / вырезания / копирования текста не отображается. Как мне включить это меню? Это работает, если это одна строка текста.

Я уже установил для этого значение true, поэтому оно должно работать, но не работает. Control.EditText.SetTextIsSelectable

Это код, который у меня есть в проекте Android.

     [assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]
    
    namespace MyProject.Droid.MRenderers
    {
        public class CustomEditorRenderer : MaterialEditorRenderer
        {
            public CustomEditorRenderer(Context context) : base(context)
            {
            }
    
            protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
            {
                base.OnElementChanged(e);
                Control?.SetBackgroundColor(Android.Graphics.Color.Transparent);
    
                if (Control != null)
                {
                        //This is the HeightRequest 
                        var ElementHeightRequest = Element.HeightRequest;
                        //Convert it to Pixels
                        var EditTextHeight= ConvertToPixels(ElementHeightRequest);
                        //Set the Control's EditText height 
                        Control.EditText.SetHeight(200);
                        Control.EditText.SetTextIsSelectable(true);                
                    Control.EditText.Background = null;
                    Control.EditText.SetBackgroundColor(Android.Graphics.Color.Transparent);
                }
            }
 

Ответ №1:

Вы могли бы установить AutoSize свойство вместо SetHeight в renderer.

Пользовательский рендерер:

 [assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]
namespace Test.Droid
{
public class CustomEditorRenderer : EditorRenderer
{
    public CustomEditorRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
            return;

        Control.Background = null;
        Control.SetPadding(0, 0, 0, 0);
        Control.ShowSoftInputOnFocus = false;
        Control.SetTextIsSelectable(true);
       
    }

}
}
 

Xaml:

         <local:CustomEditor AutoSize="TextChanges" Text="I am using Xamarin Forms to render an Editor that allows for multi-line text. However, when I long press in the Editor box when it already has more than 1 line of text, the menu is not showing up to select/cut/copy the text. How do I enable this menu? It works if it's a single line of text. I have already set this to true, so it should work but doesn't work."></local:CustomEditor>
    
 

Вы могли бы проверить вывод.
https://imgur.com/KcNtFH4

Обновлено:

Я не делаю никаких изменений для средства визуализации. Он может отображать меню Копировать / вставить / выбрать в редакторе MaterialEditorRenderer.

 [assembly: ExportRenderer(typeof(CustomMaterialEditor), 
typeof(CustomMaterialEditorRenderer))]
namespace Test3.Droid
{
public class CustomMaterialEditorRenderer : MaterialEditorRenderer
{
    public CustomMaterialEditorRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
            return;

        Control.Background = null;
        Control.SetPadding(0, 0, 0, 0);
        //Control.DispatchSetSelected(true);               
        //Control.ShowSoftInputOnFocus = false;
        //Control.SetTextIsSelectable(true);

    }      
}
 }
 

Xaml:

    <local:CustomMaterialEditor
            AutoSize="TextChanges"
            BackgroundColor="LightGray"
            Text="I am using Xamarin Forms to render an Editor that allows for multi-line text. However, when I long press in the Editor box when it already has more than 1 line of text, the menu is not showing up to select/cut/copy the text. How do I enable this menu? It works if it's a single line of text. I have already set this to true, so it should work but doesn't work." />
 

введите описание изображения здесь

Комментарии:

1. Спасибо за помощь, но это не сработало. Я использую MaterialEditorRenderer, а не EditorRenderer. Мне также нужно установить высоту таким образом.

2. Есть ли у вас какие-либо особые функции MaterialEditorRenderer ? Если нет, вы можете попробовать использовать EditorRenderer .

3. Да, у MaterialEditorRenderer есть специальные функции, которые я хочу использовать, а не EditorRenderer. Спасибо

4. Я бы проверил MaterialEditorRenderer и обратную связь как можно скорее.

5. @user1179083 Я обновил свой ответ. Я не делаю никаких изменений для редактора в renderer. Меню Копировать / Вставить / Выбрать все еще отображается. Я что-то упустил?