android:scaleType="center"未达预期:dp与px的工作原理是什么?
我来帮你搞定这个问题!你想要的是背景图1:1像素无缩放,只显示屏幕/菜单区域能容纳的最大完整部分,但用scaleType="center"却只看到一小部分,大概率是这两个原因在搞鬼:
问题根源分析
系统自动缩放了你的图片
Android会根据屏幕密度自动缩放drawable-xxhdpi这类带密度标识文件夹里的图片。比如你把720x1280的图放在drawable-xxhdpi,如果你的手机是xxxhdpi(4倍密度),系统会把图片放大到960x1707像素。这时候哪怕你设了center,显示的也是放大后图片的中间区域,自然看起来是“一小部分”。菜单/控件的尺寸设置不对
如果你的菜单容器本身尺寸很小(比如只是个标题栏),那即使图片不缩放,也只能显示图片的一小块区域。
解决方案
第一步:先让图片保持原始像素尺寸
把你的720x1280px图片移到drawable-nodpi文件夹下(没有的话新建一个)。这个文件夹里的图片不会被系统根据屏幕密度缩放,完全保持原始像素大小。
第二步:根据你的背景设置方式选对应配置
方式1:用ImageView作为菜单背景容器
在布局XML里这样写:
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/你的背景图文件名" android:scaleType="center" />
match_parent让ImageView填满整个菜单区域scaleType="center"会让图片不缩放,如果图片比菜单区域大,就显示图片中间和菜单一样大的区域;如果图片比菜单小,就完整显示并居中。
方式2:用Layout(比如LinearLayout)的background属性
先创建一个XML drawable文件(比如命名为bg_menu.xml):
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/你的背景图文件名" android:gravity="center" android:tileMode="disabled" />
然后在你的菜单Layout里引用这个drawable:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_menu" />
这样背景图会以原始像素尺寸居中显示,完全不会被拉伸或缩放,菜单区域能容纳多少就显示图片的对应完整部分。
最后检查下菜单容器的布局参数,确保它的layout_width和layout_height是match_parent或者你需要的完整区域大小,这样就能完美实现你想要的效果啦!
内容的提问来源于stack exchange,提问作者user157810
相关产品推荐
相关产品推荐

