You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含大图头部的CollapsingToolbarLayout如何设置起始高度(SDK26)

解决方案:设置CollapsingToolbarLayout的起始(展开)高度

我之前在SDK26环境下踩过类似的坑,给你几个亲测有效的方案:

方案一:静态布局直接指定固定高度

最简单的方式就是直接给CollapsingToolbarLayout设置固定的layout_height,比如你想要起始高度为300dp:

<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/collapsing_toolbar"
    android:layout_width="match_parent"
    android:layout_height="300dp" <!-- 这里直接设置起始高度 -->
    android:fitsSystemWindows="true"
    app:contentScrim="?attr/colorPrimary"
    app:expandedTitleMarginEnd="64dp"
    app:expandedTitleMarginStart="16dp"
    app:layout_scrollFlags="scroll|exitUntilCollapsed">

同时记得把内部的ImageView高度设为match_parent,加上app:layout_collapseMode="parallax"实现视差效果,这样图片就能撑满整个起始高度。

方案二:动态计算适配屏幕高度

如果需要根据屏幕尺寸动态调整(比如占屏幕高度的1/3),可以在代码里计算后设置:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 获取屏幕总高度
    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int screenHeight = displayMetrics.heightPixels;

    // 减去状态栏高度(如果开了fitsSystemWindows)
    int statusBarHeight = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        statusBarHeight = getResources().getDimensionPixelSize(resourceId);
    }

    // 计算起始高度(比如屏幕可用高度的1/3)
    int startHeight = (screenHeight - statusBarHeight) / 3;

    // 给CollapsingToolbarLayout设置高度
    CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
    ViewGroup.LayoutParams params = collapsingToolbar.getLayoutParams();
    params.height = startHeight;
    collapsingToolbar.setLayoutParams(params);
}

方案三:通过AppBarLayout间接控制

因为CollapsingToolbarLayout嵌套在AppBarLayout里,也可以给AppBarLayout设置固定高度,让子布局匹配:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="300dp" <!-- 控制AppBar整体高度 -->
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent" <!-- 匹配AppBar高度 -->
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="16dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">
        <!-- 内部ImageView和Toolbar -->
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

这种方式适合需要统一控制整个AppBar区域高度的场景。

关键注意点

  • 一定要确保CollapsingToolbarLayout里有一个设置了app:layout_collapseMode="pin"的Toolbar,否则折叠后顶部会没有导航栏。
  • 如果用网络图片,记得给ImageView设置scaleType="centerCrop",避免图片加载后打乱布局高度。
  • SDK26下不需要额外兼容处理,以上方案都能正常运行。

内容的提问来源于stack exchange,提问作者hemi_p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:54:10