2016-01-20 98 views
0

我使用下面的代码隐藏滚动条上的动作条,但它在顶部留下了空白区域。我通过一些其他职位也去了,但它并没有帮助隐藏滚动条上的动作栏留下空白空间

我使用Xamarin

我的布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:local="http://schemas.android.com/apk/res-auto" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<!-- The main content view --> 
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipToPadding="false"> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:paddingTop="?attr/actionBarSize" 
     android:clipToPadding="false" 
     android:layout_height="match_parent" /> 
    <LinearLayout 
     android:id="@+id/toolbarContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="?attr/colorPrimary"> 
     <include 
      android:id="@+id/toolbar" 
      layout="@layout/toolbar" /> 
    </LinearLayout> 
</FrameLayout> 

工具栏:

​​

recyclerview设置

_recyclerView = _view.FindViewById<RecyclerView>(Resource.Id.videoRecyclerView); 
_recyclerView.AddOnScrollListener(new ScrollListner(Activity, _recyclerView)); 

和滚动列表程序 public virtual void OnMoved(int distance) _toolbarContainer.TranslationY = -distance; }

public virtual void OnShow() 
    { 
     _toolbarContainer.Animate().TranslationY(0).SetInterpolator(new DecelerateInterpolator(2)).Start(); 
    } 

    public virtual void OnHide() 
    { 
     _toolbarContainer.Animate().TranslationY(-_toolbarHeight).SetInterpolator(new AccelerateInterpolator(2)).Start(); 
    } 

    public override void OnScrollStateChanged(RecyclerView recyclerView, int newState) 
    { 
     base.OnScrollStateChanged(recyclerView, newState); 

     if (newState == RecyclerView.ScrollStateIdle) 
     { 
      if (_totalScrolledDistance < _toolbarHeight) 
      { 
       SetVisible(); 
      } 
      else 
      { 
       if (_controlsVisible) 
       { 
        if (_toolbarOffset > HideThreshold) 
        { 
         SetInvisible(); 
        } 
        else 
        { 
         SetVisible(); 
        } 
       } 
       else 
       { 
        if ((_toolbarHeight - _toolbarOffset) > ShowThreshold) 
        { 
         SetVisible(); 
        } 
        else 
        { 
         SetInvisible(); 
        } 
       } 
      } 
     } 
    } 

    public override void OnScrolled(RecyclerView recyclerView, int dx, int dy) 
    { 
     base.OnScrolled(recyclerView, dx, dy); 

     ClipToolbarOffset(); 
     OnMoved(_toolbarOffset); 

     if ((_toolbarOffset < _toolbarHeight && dy > 0) || (_toolbarOffset > 0 && dy < 0)) 
     { 
      _toolbarOffset += dy; 
     } 

     if (_totalScrolledDistance < 0) 
     { 
      _totalScrolledDistance = 0; 
     } 
     else 
     { 
      _totalScrolledDistance += dy; 
     } 
    } 

    private void ClipToolbarOffset() 
    { 
     if (_toolbarOffset > _toolbarHeight) 
     { 
      _toolbarOffset = _toolbarHeight; 
     } 
     else if (_toolbarOffset < 0) 
     { 
      _toolbarOffset = 0; 
     } 
    } 

    private void SetVisible() 
    { 
     if (_toolbarOffset > 0) 
     { 
      OnShow(); 
      _toolbarOffset = 0; 
     } 

     _controlsVisible = true; 
    } 

    private void SetInvisible() 
    { 
     if (_toolbarOffset < _toolbarHeight) 
     { 
      OnHide(); 
      _toolbarOffset = _toolbarHeight; 
     } 

     _controlsVisible = false; 
    } 

我现在已经花了4个多小时在此尝试了很多事情,但它并没有在所有的工作。 任何帮助表示赞赏。

+0

Android设计支持提供了'CoordinatorLayout',这是一种布局,它提供了子视图之间的触摸事件的额外级别的控制,这是设计库中许多组件利用的。你应该检查Xamarin的网站https://components.xamarin.com/gettingstarted/xamandroidsupportdesign – 2016-01-20 13:32:30

+0

@PawanVimukthi你在哪里建议我使用CoordinatorLayout? – goldsmit409

+0

您应该在活动布局上使用'CoordinatorLayout'。 'CoordinatorLayout'是一个父视图,所以你可以在其中使用子视图。 – 2016-01-20 13:44:01

回答