隐藏在滚动的行动酒吧留下空白

时间:2016-01-20 13:22:52

标签: android android-layout xamarin android-actionbar

我使用下面的代码隐藏了滚动操作栏,但它在顶部留下了空白区域。我也经历了其他一些帖子,但没有帮助

我正在使用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>

工具栏:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

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个多小时尝试了很多东西,但它根本不起作用。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

根据评论中的建议,您应该使用

协调员布局工具栏结合使用,并在工具栏上设置scrollflags,如下所示:

    $val=<<<AAA


     <form> <input type="hidden" name="id" value="$id" /></form>

AAA;
echo $val;

你可以在这里找到很好的例子:

https://mzgreen.github.io/2015/06/23/How-to-hideshow-Toolbar-when-list-is-scrolling(part3)/

有关协调员布局的更多信息:

http://android-developers.blogspot.cz/2015/05/android-design-support-library.html

它会更干净,而不是手动完成这一切。