BottomNavigationBarXF 自動隱藏

目前,BottomNavigationBarXF 好像不支持 CoordinatorLayout 佈局(BottomNavigationBar是支持的)。能夠用如下比較迂迴的方法實現BottomBar的自動隱藏:ide

一、Touch響應。佈局

以自定義WebView爲例:ui

在HybridWebViewRenderer中添加方法:spa

//...
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中:code

  //...
       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); } } //...

二、添加BarHide屬性:orm

BottomBarPage中添加BarHide:blog

    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中:get

        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;
                };
//...
            }
        }
相關文章
相關標籤/搜索