以编程方式设置 collapsingToolbarLayout 的高度

Programmatically set height of collapsingToolbarLayout

基本上,我在视差部分有一个带有图像视图的 collapsingToolbarLayout。这个图片保证是正方形的,而我要显示整张图片,所以我需要设置collapsingToolbarLayout的高度等于宽度。我怎样才能做到这一点?出于某种原因,imageView 和 coordinatorlayout 上的 wrap_content 并没有使其真正包装内容。请注意,我正在使用 Glide 从网络资源加载图像,因此 activity 启动时我没有它。

当前布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coordinatorLayout"
    android:fitsSystemWindows="true">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:fitsSystemWindows="true">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/main_collapsing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="140dp"
            app:expandedTitleMarginBottom="90dp"
            app:expandedTitleMarginEnd="64dp">
            <ImageView
                app:layout_collapseMode="parallax"
                android:id="@+id/icon"
                android:transitionName="pic"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"
                android:fitsSystemWindows="true"/>
            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginBottom="20dp"
                app:layout_collapseMode="parallax">
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:padding="20dp"
                    android:orientation="horizontal">
                    <ImageView
                        android:layout_width="100dp"
                        android:layout_height="100dp"
                        android:id="@+id/smallicon"/>
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        android:layout_gravity="bottom"
                        android:padding="20dp">
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/artist"
                            android:ellipsize="end"
                            android:singleLine="true"
                            android:textSize="24sp"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:ellipsize="end"
                            android:singleLine="true"
                            android:id="@+id/date"/>
                    </LinearLayout>
                </LinearLayout>
            </FrameLayout>
            <android.support.v7.widget.Toolbar
                android:id="@+id/main_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:layout_collapseMode="pin"/>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/list"
        android:dividerHeight="2dp"
        android:transitionName="bottom">
    </android.support.v7.widget.RecyclerView>
</android.support.design.widget.CoordinatorLayout>

实际上,您可能只想将 android:adjustViewBounds="true" 添加到您的 ImageView。根据 documentation of adjustViewBounds

Set this to true if you want the ImageView to adjust its bounds to preserve the aspect ratio of its drawable.

如果您将其保留为 false(默认值),那么当 Glide 稍后加载图像时 ImageView 将不会调整大小。