我正在开发一个Android应用程序(API 11+),我想支持多个屏幕大小和密度,我的项目有不同的密度文件夹,以提供可绘制资源(mdpi,hdpi,xhdpi和xxhdpi)和不同的布局文件夹限定符(小,正常,大和xlarge)。
来自Google文档:
xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp
我认为我理解“dp”单元。如果我没错,480x800px mdpi手机屏幕有480x800dp单位,因为在mdpi设备1px = 1dp,所以这个屏幕应该很大。具有相同尺寸和密度的平板电脑太大了吗?
如何为这2台设备提供不同的布局?我该如何区分它们?
答案 0 :(得分:1)
对于drawables有不同的文件夹,您可以为屏幕尺寸创建不同的布局。
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
来自Android文档:http://developer.android.com/guide/practices/screens_support.html
修改强> 要以编程方式检测设备是手机还是平板电脑,您可以使用以下代码:
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
然后,在您的活动中,您可以根据之前的值设置不同的布局:
@Override
onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if isTablet(this)
setContentView(R.layout.handset_main_layout);
else
setContentView(R.layout.tablet_maint_layout);
}
这只是一个例子。
答案 1 :(得分:1)
你说的mdpi设备很可能是相当大的。像平板电脑一样双。 但是由于这些不公平性(并且因为不同的设备错误地报告了它们的大小/ dpi值),Android决定采用不同的方法。 如果您只能重新考虑定位Android 13+(这是合理的,因为11-12的市场份额约为0%),您可以使用swXXXdp(dp中最小宽度)过滤器:
res/layout-mdpi/content.xml for phones and phablets
res/layout-sw600dp-mdpi/content.xml for 7" tablet
res/layout-sw720dp-mdpi/content.xml for 10" tablet and above
dpi值在这里并不重要。只是如果你想让这些图像看起来更清晰/光亮。
答案 2 :(得分:0)
如果您不使用像素作为任何东西并为ldpi,mdpi,xdpi等提供不同的资源,那么您将获得很长的路要走。系统将确定应该为特定设备使用的布局文件和资产。