如何使Xamarin.Forms.Editor可滚动/自动调整大小?

时间:2017-11-01 03:33:06

标签: xamarin.forms xamarin.android

我有一个带有编辑器的滚动布局,我希望可以滚动或自动调整大小以适应内容。

我无法找到该怎么做。

我尝试了自定义渲染器,但我无法找到如何将InputMethods设置为Control。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在这篇文章的帮助下:https://forums.xamarin.com/discussion/80360/editor-inside-scrollview-not-scrolling

修复了Android上的滚动(iOS默认工作)。当触摸编辑器内部时,它会避免父滚动事件,仅触发编辑器滚动。

首先是关于Android项目的课程:

using Android.Views;
namespace MyApp.Droid
{
    public class DroidTouchListener : Java.Lang.Object, View.IOnTouchListener
    {
        public bool OnTouch(View v, MotionEvent e)
        {
            v.Parent?.RequestDisallowInterceptTouchEvent(true);
            if ((e.Action & MotionEventActions.Up) != 0 && (e.ActionMasked & MotionEventActions.Up) != 0)
            {
                v.Parent?.RequestDisallowInterceptTouchEvent(false);
            }
            return false;
        }
    }
}

然后在Android Custom EditorRenderer上使用它:

protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
    base.OnElementChanged(e);
    if (e.OldElement == null)
    {
        var nativeEditText = (global::Android.Widget.EditText)Control;

        //While scrolling inside Editor stop scrolling parent view.
        nativeEditText.OverScrollMode = OverScrollMode.Always;
        nativeEditText.ScrollBarStyle = ScrollbarStyles.InsideInset;
        nativeEditText.SetOnTouchListener(new DroidTouchListener());

        //For Scrolling in Editor innner area
        Control.VerticalScrollBarEnabled = true;
        Control.MovementMethod = ScrollingMovementMethod.Instance;
        Control.ScrollBarStyle = Android.Views.ScrollbarStyles.InsideInset;
        //Force scrollbars to be displayed
        Android.Content.Res.TypedArray a = Control.Context.Theme.ObtainStyledAttributes(new int[0]);
        InitializeScrollbars(a);
        a.Recycle();
    }
}