以编程方式设置 AppBarLayout 子项的 minHeight
Setting minHeight of AppBarLayout's child programmatically
我想要实现的是类似于 CollapsingToolbar 的东西。我的 activity 有以下布局。
AppBarLayout
中的项目可以是可变高度。因此,我试图从 ViewTreeObserver.OnPreDrawListener
.
的 onPreDraw()
方法中以编程方式设置项目的 minHeight
但是以编程方式设置 minHeight 似乎没有任何效果。 AppBarLayout 确实完全滚出了屏幕。直接在 XML 内设置 minHeight 会产生预期的结果并阻止 AppBarLayout 滚动出屏幕。
我是不是遗漏了什么,或者无法以编程方式设置 minHeight?
<?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>
@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;
}
});
}
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar);
appBarLayout.setMinimumHeight(100);
你试过吗?
尝试改用 setMinimumHeight(minHeight) - 这应该可以解决问题。
我想要实现的是类似于 CollapsingToolbar 的东西。我的 activity 有以下布局。
AppBarLayout
中的项目可以是可变高度。因此,我试图从 ViewTreeObserver.OnPreDrawListener
.
onPreDraw()
方法中以编程方式设置项目的 minHeight
但是以编程方式设置 minHeight 似乎没有任何效果。 AppBarLayout 确实完全滚出了屏幕。直接在 XML 内设置 minHeight 会产生预期的结果并阻止 AppBarLayout 滚动出屏幕。
我是不是遗漏了什么,或者无法以编程方式设置 minHeight?
<?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>
@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;
}
});
}
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar); appBarLayout.setMinimumHeight(100);
你试过吗?
尝试改用 setMinimumHeight(minHeight) - 这应该可以解决问题。