BottomNavigationBarXF 自动隐藏

目前,BottomNavigationBarXF 好像不支持 CoordinatorLayout 布局(BottomNavigationBar是支持的)。可以用以下比较迂回的方法实现BottomBar的自动隐藏:

1、Touch响应。

以自定义WebView为例:

在HybridWebViewRenderer中添加方法:

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

            if (Control == null)
            {
                //...
            }
//...
            Control.Touch += Control_Touch;
//...
      }

        float _startEventY;
        float _heightChange;
        private void Control_Touch(object sender, TouchEventArgs e)
        {
            var ev = e.Event;
            MotionEventActions action = ev.Action & MotionEventActions.Mask;
            switch (action) { case MotionEventActions.Down: _startEventY = ev.GetY(); _heightChange = 0; break; case MotionEventActions.Move: float delta = (ev.GetY() + _heightChange) - _startEventY; Element.TouchScroll(delta); /* var callDialog = new AlertDialog.Builder((Activity)Forms.Context); callDialog.SetMessage(String.Format("scrolling delta is {0}, change {1}, start {2}", delta, _heightChange, _startEventY)); callDialog.SetNegativeButton("Cancel", delegate { }); callDialog.Show(); */ break; } e.Handled = false; }
//...

在HybridWebViewPage中:

  //...
       public HybridWebViewPage(Uri uri)
        {
            InitializeComponent();
            //...
            hybridWebView.TouchScroll += WebViewPage_TouchScroll;
        }
        //...
        private void WebViewPage_TouchScroll(float moved)
        {
            if (moved < -60)
            {
                App.tabbedPage.BarHide?.Invoke(true); } else if (moved > 60) { App.tabbedPage.BarHide?.Invoke(false); } } //...

2、添加BarHide属性:

BottomBarPage中添加BarHide:

    public class BottomBarPage : TabbedPage
    {
        public enum BarThemeTypes { Light, DarkWithAlpha, DarkWithoutAlpha }

        public bool FixedMode { get; set; }

        public BarThemeTypes BarTheme { get; set; }
        /**/
        public static BindableProperty BarHideProperty = BindableProperty.Create(nameof(BarHide), typeof(Action<bool>), typeof(BottomBarPage), null, BindingMode.OneWayToSource);
        public Action<bool> BarHide
        {
            get { return (Action<bool>)GetValue(BarHideProperty); }
            set { SetValue(BarHideProperty, value); }
        }
        public void RaiseCurrentPageChanged()
        {
            OnCurrentPageChanged();
        }
    }

BottomBarPageRenderer中:

        protected override void OnElementChanged(ElementChangedEventArgs<BottomBarPage> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)
            {
//...
                Element.BarHide = (isHide) =>
                {
                    if (isHide)
                    {
                        _bottomBar.Hide(false);
                    }
                    else
                    {
                        _bottomBar.Show(false);
                    }
                };
//...
                _bottomBar.BarDidHide = (sender, evts) => {
                    _bottomBar.TranslationY = 0;
                };
//...
            }
        }

 

转载于:https://www.cnblogs.com/arkoo/p/7598432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值