Android工具栏显示/隐藏空白区域

时间:2014-12-13 11:45:12

标签: android android-actionbar toolbar

当用户滚动列表时,我正在尝试隐藏或显示工具栏。要做到这一点,我正在使用翻译,但会出现一个空格而不是我的actionBar。如果我使用setVisibility(View.GONE),则在动画期间会出现空白区域,并在完成时隐藏它是丑陋的..

Here is a short video of my issue

以下是我的动画制作方法(来自Google I / O应用程序):

public void showToolbar(boolean show){
    if (show) {
        toolbar.animate()
                .translationY(0)
                .alpha(1)
                .setDuration(HEADER_HIDE_ANIM_DURATION)
                .setInterpolator(new DecelerateInterpolator());
    } else {
        toolbar.animate()
                .translationY(-toolbar.getBottom())
                .alpha(0)
                .setDuration(HEADER_HIDE_ANIM_DURATION)
                .setInterpolator(new DecelerateInterpolator());
    }
}

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainContent">

<include layout="@layout/toolbar"
    android:id="@+id/my_toolbar" />

<fragment
    android:name="com.ar.oe.fragments.SectionsFragment"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"/>

</RelativeLayout>

我的工具栏

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
/>

2 个答案:

答案 0 :(得分:3)

您需要为容器设置动画,而不是工具栏。

试试这个:

RelativeLayout mainContent = (RelativeLayout) findById(R.id.mainContent);

public void showToolbar(boolean show){
if (show) {
    mainContent.animate()
            .translationY(0)
            .alpha(1)
            .setDuration(HEADER_HIDE_ANIM_DURATION)
            .setInterpolator(new DecelerateInterpolator());
} else {
    mainContent.animate()
            .translationY(-toolbar.getBottom())
            .alpha(0)
            .setDuration(HEADER_HIDE_ANIM_DURATION)
            .setInterpolator(new DecelerateInterpolator());
}
}

它对我有用;)

如果您想使用工具栏移动片段,则需要为片段设置动画,而不仅仅是栏。

答案 1 :(得分:1)

当用户尝试滚动时,最好为工具栏和下面的片段(一起)显示上滑翻译动画,这样只有工具栏离开视图并且片段到达顶部。 (比方说,200ms)。要做到这一点,将整个外部相对布局翻译为20%左右(您可以更改为只有工具栏离开视图):

在anim文件夹中添加slide_up.xml:

<?xml version="1.0" encoding="utf-8"?>
<set
   xmlns:android="http://schemas.android.com/apk/res/android">  
   <translate 
    android:fillAfter="false"
    android:fromYDelta="0%" 
    android:toYDelta="-20%" 
    android:duration="200"/>

</set>

然后,当触发滚动事件时,请执行以下操作:

 ...
 RelativeLayout rel = (RelativeLayout)findViewById(R.id.mainContent);
 Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up);
 rel.startAnimation(slideUp);
 ...

希望这会有所帮助......