如何使用Kotlin调整MaterialToolbar中navigationIcon的尺寸
解决方法
方案1:XML静态配置(最简单)
MaterialToolbar从Material Components 1.3.0版本开始原生支持app:navigationIconSize属性,直接在布局中指定图标尺寸即可:
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/topAppBar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:title="Ticketon" app:navigationIcon="@mipmap/ic_launcher_round" app:navigationIconSize="24dp" <!-- 新增这行,可自定义尺寸 --> app:menu="@menu/toolbar_menu" style="@style/Widget.MaterialComponents.Toolbar.Primary" />
24dp是Material Design规范推荐的工具栏图标标准尺寸。
方案2:Kotlin动态调整Drawable尺寸
如果需要运行时动态修改图标(比如加载本地用户头像),可以先缩放Drawable再设置给Toolbar:
首先添加dp转px的通用扩展函数:
fun Int.dpToPx(context: Context): Int { return TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), context.resources.displayMetrics ).toInt() }
然后调整图标尺寸并设置:
val targetIconSize = 24.dpToPx(this) // this为上下文对象 val originalIcon = ContextCompat.getDrawable(this, R.mipmap.ic_launcher_round) ?: return originalIcon.setBounds(0, 0, targetIconSize, targetIconSize) topAppBar.navigationIcon = originalIcon
提示:如果多个界面复用同一个Drawable资源出现样式冲突,可在设置bounds前调用
originalIcon.mutate()生成独立的Drawable副本,避免互相影响。
方案3:配合图片加载库调整(适用于网络用户头像)
如果你的用户头像是从网络加载,可直接用Glide、Coil等库在加载时指定尺寸、加圆形裁剪等效果,以Coil为例:
ImageRequest.Builder(context) .data("用户头像网络地址") .size(24.dpToPx(context)) // 指定加载尺寸 .transformations(CircleCropTransformation()) // 圆形裁剪,适合头像场景 .target { topAppBar.navigationIcon = it } .build() .also { context.imageLoader.enqueue(it) }
内容的提问来源于stack exchange,提问作者Diset
相关产品推荐
相关产品推荐

