Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置AppBarLayout的最小高度';以编程方式创建子对象_Android_Android Appbarlayout - Fatal编程技术网

Android 设置AppBarLayout的最小高度';以编程方式创建子对象

Android 设置AppBarLayout的最小高度';以编程方式创建子对象,android,android-appbarlayout,Android,Android Appbarlayout,我想要实现的是类似于折叠工具栏的功能。我有下面的活动布局 AppBarLayout中的项目可以具有可变高度。因此,我试图从ViewTreeObserver.OnPreDrawListener的onPreDraw()方法中以编程方式设置项的minHeight 但是,以编程方式设置最小高度似乎没有任何效果。AppBarLayout确实会完全从屏幕上滚动。直接在XML中设置minHeight会产生预期的结果,并阻止AppBarLayout滚动到屏幕外 我是否遗漏了什么,或者无法通过编程设置最小高度 &

我想要实现的是类似于折叠工具栏的功能。我有下面的活动布局

AppBarLayout
中的项目可以具有可变高度。因此,我试图从
ViewTreeObserver.OnPreDrawListener
onPreDraw()
方法中以编程方式设置项的
minHeight

但是,以编程方式设置最小高度似乎没有任何效果。AppBarLayout确实会完全从屏幕上滚动。直接在XML中设置minHeight会产生预期的结果,并阻止AppBarLayout滚动到屏幕外

我是否遗漏了什么,或者无法通过编程设置最小高度

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    >

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        >

       <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/header" >
            // Header of variable height
       </androidx.constraintlayout.widget.ConstraintLayout>

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_items"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

AppBarLayout AppBarLayout=(AppBarLayout)findViewById(R.id.app_bar); appBarLayout.setMinimumHeight(100)


你试过了吗?

试着用setMinimumHeight(minHeight)来代替-这应该可以解决问题。

是的,已经试过将minHeight设置到AppBarLayout,但没有成功。我昨天做了什么,确信我试过将minHeight设置到AppBarLayout,但没有成功。但是使用View.setMinimumHeight()就成功了。看起来,ConstraintLayout有自己的mMinHeight字段,而不是从视图继承,该字段是使用ConstraintLayout.setMinHeight()设置的
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        clContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                clContent.getViewTreeObserver().removeOnPreDrawListener(this);

                int minHeight = calculateMinHeight();
                clHeader.setMinHeight(minHeight);

                return false;
            }
        });
}