当isgestreenabled设置为false时,Master页将无法打开.Android
本文关键字:Android Master 设置 isgestreenabled false | 更新日期: 2023-09-27 18:16:05
我在我的应用程序上有一个主详细页面。打开主页面的标准方法是选择汉堡菜单图标或从左侧滑动。我的一个详细页面碰巧使用了轮播页面。因此,从左边滑动既可以打开母版页,也可以向左滑动旋转轮(如果发生错误的事件,这会非常令人恼火)。
为了阻止从左边滑动时出现母版页,我将isgestreenabled设置为false。然而,这将阻止母版页的出现。尽管在按汉堡菜单图标时有触觉反馈,但它没有任何作用。
是否有一种方法可以强制在MasterDetailPage上忽略滑动手势,而不是图标上的点击手势?
这是一个非常简单的应用程序,它的MasterDetailPage和IsGestureEnabled设置为false。母版页无法打开。https://www.dropbox.com/s/rkm5eph3vr38avm/MasterDetailPageTest.zip?dl=0
我通过为MasterDetailPage创建一个自定义渲染器来解决这个问题。它应该适合我现在的需要。
public class MyMasterDetailPageRenderer : Xamarin.Forms.Platform.Android.AppCompat.MasterDetailPageRenderer
{
public override bool OnTouchEvent(MotionEvent e)
{
if (IsDrawerOpen(Android.Support.V4.View.GravityCompat.Start))
return base.OnTouchEvent(e);
else
{
if (e.Action == MotionEventActions.Up || e.Action == MotionEventActions.Down)
return base.OnTouchEvent(e);
else
{
CloseDrawers();
return true;
}
}
}
}
装配线需要添加到名称空间之外:
[assembly: ExportRenderer(typeof(MyMasterDetailPage), typeof(MyMasterDetailPageRenderer))]
这并不能完全解决问题,但是当滑动时母版页不再打开
Richard的代码在做了一些修改后就可以为我工作了
RootView page;
protected override void OnElementChanged( VisualElement oldElement, VisualElement newElement ) {
base.OnElementChanged( oldElement, newElement );
page = newElement as RootView;
}
public override bool OnTouchEvent( MotionEvent e ) {
if( IsDrawerOpen( Android.Support.V4.View.GravityCompat.Start ) )
return base.OnTouchEvent( e );
else {
if( (e.Action == MotionEventActions.Up || e.Action == MotionEventActions.Down || e.Action == MotionEventActions.Move)
&& (page?.SwipeEnabled ?? false)
)
return base.OnTouchEvent( e );
else {
CloseDrawers();
return true;
}
}
}