【发布时间】:2016-01-28 19:02:39
【问题描述】:
我使用下面的代码在滚动时隐藏了操作栏,但它在顶部留下了空白区域。我也浏览了其他一些帖子,但没有帮助
我正在使用 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));
和滚动监听器 公共虚拟无效 OnMoved(int 距离) { _toolbarContainer.TranslationY = -距离; }
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 个多小时尝试了很多东西,但它根本不起作用。 任何帮助表示赞赏。
【问题讨论】:
-
Android 设计支持提供了
CoordinatorLayout,这种布局提供了对子视图之间的触摸事件的额外控制,设计库中的许多组件都利用了这一点。您应该查看 Xamarin 的网站 components.xamarin.com/gettingstarted/xamandroidsupportdesign -
@PawanVimukthi 你建议我在哪里使用 CoordinatorLayout?
-
你应该在你的活动布局上使用
CoordinatorLayout。CoordinatorLayout是一个父视图,因此您可以在其中使用子视图。
标签: android android-layout xamarin android-actionbar