CoordinatorLayout使用LinearLayout作为子项的自定义行为

时间:2016-02-07 15:31:46

标签: android android-layout android-coordinatorlayout coordinator-layout

我想在LinearLayout上实现自定义行为。 这是我的xml的结构:

<android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout.../>
<android.support.v4.widget.DrawerLayout.../>
 <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_behavior="com.xxx.BottomBarBehavior"
            android:layout_gravity="bottom|center_horizontal".../>
</android.support.design.widget.CoordinatorLayout>

LinearLayout位于DrawerLayout下方的CoordinatorLayout内。 显示小吃栏时,LinearLayout不会向上移动。我只是无法理解它。布局是这样的,DrawerLayout包含一个ViewPager,这个viewPager由另一个xml由一个片段填充。小吃栏由此片段的recyclerView中的元素生成。

这就是我的BottomBarBehavior自定义行为类的样子:

public class BottomBarBehavior extends CoordinatorLayout.Behavior<LinearLayout> {
public BottomBarBehavior(Context context, AttributeSet attrs) {}

@Override
public boolean layoutDependsOn(CoordinatorLayout parent, LinearLayout child, View dependency) {
    return ( dependency instanceof Snackbar.SnackbarLayout ) ||
            ( dependency instanceof DrawerLayout );
}

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, LinearLayout child, View dependency) {
    if( dependency instanceof Snackbar.SnackbarLayout ) {
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
        child.setTranslationY(translationY);
    }
    return true;
}

}

1 个答案:

答案 0 :(得分:0)

我认为您在super();的构造函数中错过了BottomBarBehavior