我在折叠工具栏和背景图片时遇到问题。我希望我的背景图像在主页片段可见时与状态栏重叠,但我需要在每个其他片段处阻止折叠工具栏。
我在所有可能的组合中尝试了android:fitsSystemWindows="true"
,但没有工作。
当我设置样式v21时
<item name="android:windowTranslucentStatus">false</item>
我的应用看起来像这样: http://imgur.com/a/DrVoh
然后当我设置TranslucentStatus to true
时,我在主片段中获得了所需的效果,但是在下面发布的屏幕上可以看到所有其他片段的工具栏。
当我折叠图像并转到任何其他片段时,会出现另一个问题,所有工具栏图标都会消失。问题可能是由于阻塞崩溃引起的,但我不确定,是否有人建议使用不同的方法来阻止其他片段的工具栏折叠,以便我可以对其进行测试?
这是我的main.xml布局
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<android.support.design.widget.AppBarLayout
android:fitsSystemWindows="true"
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:fitsSystemWindows="true"
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="256dp"
android:scaleType="centerCrop"
android:src="@drawable/backdrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
android:textAlignment="center"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
样式-V21
<style name="Theme.Ecologic" parent="Base.Theme.Ecologic">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primaryDark</item>
<item name="android:windowTranslucentStatus">true</item>
我在堆栈中找到的简单代码用于启用/禁用其他片段的折叠工具栏
public void EnableCollapse()
{
_backdrop.Visibility = ViewStates.Visible;
}
public void DisableCollapse()
{
_backdrop.Visibility = ViewStates.Gone;
}
@SOLVED 几个小时后,我找到了解决方案。问题是由更改背景图像的可见性引起的。我修改了启用和禁用折叠方法,现在一切正常。我可以随时阻止工具栏扩展。
public void EnableCollapse()
{
_appBarLayout.SetExpanded(true, false);
_appBarLayout.Activated = true;
var lparams = (CoordinatorLayout.LayoutParams)_appBarLayout.LayoutParameters;
var behavior = new AppBarLayout.Behavior();
behavior.SetDragCallback(new MyDragCallBack(true));
lparams.Behavior = behavior;
}
public void DisableCollapse(View view)
{
_appBarLayout.SetExpanded(false,false);
_appBarLayout.Activated = false;
var lparams = (CoordinatorLayout.LayoutParams) _appBarLayout.LayoutParameters;
var behavior = new AppBarLayout.Behavior();
behavior.SetDragCallback(new MyDragCallBack(false));
lparams.Behavior = behavior;
if (view != null)
{
ViewCompat.SetNestedScrollingEnabled(view, false);
}
}
public class MyDragCallBack : AppBarLayout.Behavior.DragCallback
{
private readonly bool _enabled;
public MyDragCallBack(bool enable)
{
_enabled = enable;
}
public override bool CanDrag(AppBarLayout p0)
{
return _enabled;
}
}