Android中如何通过代码设置ImageView适配状态栏导航栏且不拉伸?
ImageView适配状态栏/导航栏且图片不拉伸的解决方案
问题场景
- 设置ImageView背景图片时,图片会铺满状态栏和导航栏,但存在拉伸变形问题,对应布局代码:
<ImageView android:id="@+id/imgLoginImageSlider" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/slider2" />
- 使用Glide加载图片时,图片无法铺满屏幕,上下出现空白,对应加载代码:
Glide.with(context).load(model.getDrawable_img()).into(holder.binding.imgLoginImageSlider);
解决方案
1. 调整ImageView布局属性
修改ImageView的布局参数,确保图片能延伸到状态栏/导航栏,同时保持比例不拉伸:
<ImageView android:id="@+id/imgLoginImageSlider" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:fitsSystemWindows="false" />
scaleType="centerCrop":保持图片宽高比,缩放至完全覆盖ImageView,超出部分裁剪,彻底避免拉伸。fitsSystemWindows="false":关闭系统窗口内边距限制,允许图片铺满状态栏和导航栏所在区域。
2. 配置Glide加载参数
配合ImageView的缩放模式,在Glide加载时设置对应的裁剪选项,确保图片铺满容器:
Glide.with(context) .load(model.getDrawable_img()) .centerCrop() .into(holder.binding.imgLoginImageSlider);
3. 确保Activity支持全屏布局(可选)
如果页面需要让图片自然延伸到状态栏/导航栏区域,需给对应Activity配置全屏相关设置:
- 通过主题配置(在
AndroidManifest.xml中):
<activity android:name=".YourLoginActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />
- 通过代码动态设置:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION ); }
内容的提问来源于stack exchange,提问作者Rakesh Saini
相关产品推荐
相关产品推荐

