Android 强制平板电脑使用xhdpi资源

Android 强制平板电脑使用xhdpi资源,android,xml,Android,Xml,我正在开发一个应用程序,我已经提供了从ldpi到xhdpi的所有资源,但是有些平板电脑使用hdpi(或者在我测试的Nexus7上使用tvdpi),所以当我在平板电脑上打开应用程序时,一切都很小,我想强迫他们使用xhdpi资源,我该怎么做 我不想只为平板电脑创建单独的文件,或者应用程序的大小会增加,xhdpi资源可以正常工作 在手机上,所有东西都能正常显示,平板电脑是个问题,因为它们的大屏幕分辨率很小,所以实际的英寸大小(4厘米,用尺子测量)是正确的,但实际上它们看起来很小,这使得总体设计不正确

我正在开发一个应用程序,我已经提供了从ldpi到xhdpi的所有资源,但是有些平板电脑使用hdpi(或者在我测试的Nexus7上使用tvdpi),所以当我在平板电脑上打开应用程序时,一切都很小,我想强迫他们使用xhdpi资源,我该怎么做

我不想只为平板电脑创建单独的文件,或者应用程序的大小会增加,xhdpi资源可以正常工作


在手机上,所有东西都能正常显示,平板电脑是个问题,因为它们的大屏幕分辨率很小,所以实际的英寸大小(4厘米,用尺子测量)是正确的,但实际上它们看起来很小,这使得总体设计不正确。通常,缩小尺寸是最好的选择(与增大尺寸相反). 如果图像缩小时没有降级或丢失信息,请将图像的2倍版本放入res/drawable-xhdpi文件夹中。Android将在低密度设备上适当缩小这些图像

例如,如果您将64x64像素jpg/png放入res/drawable xhdpi,Android将在mdpi设备上显示为32x32像素,在hdpi设备上显示为48x48像素,在xhdpi设备上显示为64x64像素

如果缩小图像尺寸会使图像质量下降(例如,图像中的1个像素线在缩小时会消失),则唯一的选择是将图像的变化添加到可绘制mdpi、可绘制hdpi等目录中

评论后更新:

您希望图像在更大的屏幕上显示得更大(而不是在密度更高的屏幕上)。您可以只将图像放在drawable xhdpi文件夹中,然后执行以下操作:

例如,您将在res/layout中使用此布局,其中的ImageView显示您的一幅图像:

res/draawable xhdpi/one_of_my_images.png

res/layout/somelayout.xml

....
<ImageView 
    android:layout_height="@dimen/image_height"
    android:layout_width="@dimen/image_width"
    android:src="@drawable/one_of_my_images"
    android:scaleType="fitCenter"
    ....
    />
....
<dimen name="image_height">100dip</dimen>
<dimen name="image_width">150dip</dimen>
....
....
<dimen name="image_height">150dip</dimen>
<dimen name="image_width">225dip</dimen>
....
....
<dimen name="image_height">200dip</dimen>
<dimen name="image_width">300dip</dimen>
....
<resources>
    ....
    <item type="drawable" name="one_of_my_images">@drawable/one_of_my_images_large</item>
    ....
</resources>
。。。。
res/values/dimens.xml

....
<ImageView 
    android:layout_height="@dimen/image_height"
    android:layout_width="@dimen/image_width"
    android:src="@drawable/one_of_my_images"
    android:scaleType="fitCenter"
    ....
    />
....
<dimen name="image_height">100dip</dimen>
<dimen name="image_width">150dip</dimen>
....
....
<dimen name="image_height">150dip</dimen>
<dimen name="image_width">225dip</dimen>
....
....
<dimen name="image_height">200dip</dimen>
<dimen name="image_width">300dip</dimen>
....
<resources>
    ....
    <item type="drawable" name="one_of_my_images">@drawable/one_of_my_images_large</item>
    ....
</resources>
。。。。
100度
150度
....
res/values-large/dimens.xml

....
<ImageView 
    android:layout_height="@dimen/image_height"
    android:layout_width="@dimen/image_width"
    android:src="@drawable/one_of_my_images"
    android:scaleType="fitCenter"
    ....
    />
....
<dimen name="image_height">100dip</dimen>
<dimen name="image_width">150dip</dimen>
....
....
<dimen name="image_height">150dip</dimen>
<dimen name="image_width">225dip</dimen>
....
....
<dimen name="image_height">200dip</dimen>
<dimen name="image_width">300dip</dimen>
....
<resources>
    ....
    <item type="drawable" name="one_of_my_images">@drawable/one_of_my_images_large</item>
    ....
</resources>
。。。。
150度
225dip
....
res/values xlarge/dimens.xml

....
<ImageView 
    android:layout_height="@dimen/image_height"
    android:layout_width="@dimen/image_width"
    android:src="@drawable/one_of_my_images"
    android:scaleType="fitCenter"
    ....
    />
....
<dimen name="image_height">100dip</dimen>
<dimen name="image_width">150dip</dimen>
....
....
<dimen name="image_height">150dip</dimen>
<dimen name="image_width">225dip</dimen>
....
....
<dimen name="image_height">200dip</dimen>
<dimen name="image_width">300dip</dimen>
....
<resources>
    ....
    <item type="drawable" name="one_of_my_images">@drawable/one_of_my_images_large</item>
    ....
</resources>
。。。。
200dip
300度
....
如您所见,屏幕越大,图像越大(倾斜,因此英寸)。 您可以在res/values xlarge hdpi、res/values xlarge xhdpi等中使用dimens.xml中的图像高度和图像宽度的不同值进行实验,看看什么看起来最好

评论后更新2: 如果您想要自己的“自定义”加载适当资源的方案,请将它们设置为id res/drawable nodpi: 例如
res/drawable nodpi/one_my_images_normal.png res/drawable nodpi/one_of_my_images_large.png res/drawable nodpi/one_my_images_xlarge.png

然后在适当的drawable dir(res/drawable/、res/drawable large、/res/drawable-sw360dp/)中放入一个xml文件,间接引用nodpi目录中的正确资源:例如

res/drawable xlarge mdpi/my_images.xml

....
<ImageView 
    android:layout_height="@dimen/image_height"
    android:layout_width="@dimen/image_width"
    android:src="@drawable/one_of_my_images"
    android:scaleType="fitCenter"
    ....
    />
....
<dimen name="image_height">100dip</dimen>
<dimen name="image_width">150dip</dimen>
....
....
<dimen name="image_height">150dip</dimen>
<dimen name="image_width">225dip</dimen>
....
....
<dimen name="image_height">200dip</dimen>
<dimen name="image_width">300dip</dimen>
....
<resources>
    ....
    <item type="drawable" name="one_of_my_images">@drawable/one_of_my_images_large</item>
    ....
</resources>

....
@可绘制/一张我的图片\u大
....

这意味着对于超大的mdpi屏幕,Android将从drawable nodpi目录加载“one_of_my_image_large.png”。

不幸的是,我认为您无法在应用程序级别控制它。假设密度“bucket”是硬编码到设备中的,如果可用,它将始终获取与其硬编码密度类型匹配的资源。我想为每个设备提供所有资源,这也无助于解决我的问题,因为即使我只提供了xhdpi,系统也会将其缩小到平板电脑的hdpi。您不希望图像保持其大小。相反,您希望在更高密度的设备上使图像变大(以英寸为单位)?或者您希望图像在较大的设备上变大(以英寸为单位)?这意味着您的图像大小与屏幕密度无关,而是与屏幕大小相关。对布局使用大布局或布局xlarge(或对尺寸使用大值或值xlarge)。对于更大的屏幕,您可以使ImageView(在其中显示图像)比普通屏幕更大(以下倾为单位)。在这里或那里添加一些额外的xml文件时,不要担心APK大小。它们会被压缩,不会给你的APK大小增加太多(除非你有很多或者非常大的APK)。是的,你是对的。但是,您可以将所有资产放在drawable nodpi目录中,并为它们指定不同的名称。例如/res/drawable nodpi/image1_normal.png、/res/drawable nodpi/image1_xlarge.png等,并以编程方式或通过间接资源引用处理所有图像/可绘制选择。