我正在开发一个Android应用程序,我必须支持所有不同的屏幕尺寸和密度。所以我为布局创建了不同的文件夹:layout-small layout-large
和layout
。
然后我为图片创建了不同的文件夹:ldpi, mdpi
和hdpi
。在所有可绘制文件夹中,图像必须具有不同的大小?我问这个原因我有一个屏幕尺寸大且密度适中的手机,显示的图像会更小而且尺寸不合适吗?
答案 0 :(得分:73)
对于不同的屏幕尺寸,以下是应用程序中的资源目录列表,它为不同的屏幕尺寸和不同的位图绘图提供不同的布局设计,适用于小型,中型,高密度和超高密度屏幕。
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-small/my_layout.xml // layout for small screen size
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation
res/drawable-mdpi/my_icon.png // bitmap for medium density
res/drawable-hdpi/my_icon.png // bitmap for high density
res/drawable-xhdpi/my_icon.png // bitmap for extra high density
Manifest中的以下代码支持所有dpis。
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
还可以查看我的SO answer。
答案 1 :(得分:9)
答案 2 :(得分:6)
从Android 3.2(API级别13)开始,不推荐使用大小组(文件夹small,normal,large,xlarge),以支持基于可用屏幕宽度管理屏幕大小的新技术。
/>
答案 3 :(得分:4)
当涉及支持多个屏幕大小时,这听起来很高。以下会产生更好的结果。
res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp
使用显示度量标准设备宽度和高度
放置/确定哪种布局适合设备的最终宽度。
let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"
所有都应该在setContentView()之前检查。否则你会让自己陷入困境
Configuration config = getResources().getConfiguration();
Configuration config = getResources().getConfiguration();
if (config.smallestScreenWidthDp >= 600) {
setContentView(R.layout.layout-w600dp);
} else {
setContentView(R.layout.main_activity);
}
在顶部,我创建了很多适合多个屏幕的布局,这一切都取决于你,你可能与否。你可以看到来自哪个API,下载很高的游戏商店评论。形成你必须继续。
我希望它可以帮到你很多。很少使用一些第三方库,这可能会减少你的工作,但这不是最好的做法。习惯Android最佳实践。
答案 4 :(得分:3)
您需要多个屏幕support link
的清单中的权限<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
答案 5 :(得分:2)
您可以动态地找出屏幕的尺寸
Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();
可以使用此方法获得的宽度和高度来设置布局。
答案 6 :(得分:2)
使用github提供的sdp库
答案 7 :(得分:0)
添加到@ud_an
为布局创建不同的文件夹不是一个好习惯。创建您的布局,使其适用于所有屏幕尺寸。要实现此目的,请使用布局属性。 您只需要为hdpi,mdpi和ldpi类型提供不同的图像。其余的将由Android OS管理。
答案 8 :(得分:0)
您可以创建应用程序运行的最高分辨率/大小的位图,并在代码中调整它们的大小(在运行时)