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;
}
});
}