android – 相同的DPI但英寸大小不同

我知道互联网上有关于DPI px英寸等问题的不堪重负.
但经过几个小时的谷歌搜索后,我的情况似乎不会发生在其他任何人身上!

我有两个设备自定义构建与android工作室,都是mdpi.
但是一个设备是3.65英寸而另一个设备是10.1英寸.

我创建了一个文件夹,其中包含2张250×125图像,dpi设置为160 dpi

如果通常我会用dp单位而不是像素在我的XML中声明我的2个图像…我想在两个屏幕上结果应该是相同的吗?

好吧,似乎图像保持相同的大小,不看@设备是多少英寸

所以要明确:
我需要更改我的资源或代码,以便我的布局在不同英制尺寸下的尺寸相同?

这是我的mdpi 10.1平板电脑的GOOD布局:
android  – 相同的DPI但英寸大小不同

这是我的mdpi 3.65设备的BAD布局
android  – 相同的DPI但英寸大小不同

如何制作它,即使在3.65英寸的屏幕上,按钮也会缩放到与10.1相同的比例.不是英寸……不是像素……比例……

这是我的XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="center">

    <Button
        android:id="@+id/buttonEnglish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/english"
        android:layout_marginBottom="5sp"
        android:layout_marginLeft="5sp"
        android:layout_marginRight="2sp"
        android:layout_marginTop="0sp" />
    <Button
        android:id="@+id/buttonNederlands"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/nederlands"
        android:layout_marginBottom="5sp"
        android:layout_marginLeft="20sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="0sp"
        />
</LinearLayout>

我很绝望…
Thanx提前

解决方法:

这可能有助于解释您所面临的问题……

您的图像为250×125 – 宽度为250像素,高度为125像素.

您指定了160 dpi – 这意味着1英寸= 160像素.

因此,两个屏幕都按照您的要求进行操作,并在1.5625英寸处显示250像素.在大屏幕上,它看起来“按比例”正确.在3.65英寸的屏幕上,按钮占据屏幕的一半以上 – 就像你要求它一样.

如果您希望较小的屏幕看起来像较大的屏幕,那么您有三个选项:

>调整图像大小并提供2个图像资源(或更多用于更多种类的屏幕).这就是为什么你可以拥有mdpi,hdpi,xhdpi等资源文件夹的原因.你可以调整图像中的像素以适应屏幕大小.
>您使用“加权”LinearLayout,根据可用的屏幕空间调整提供的空间大小.对于这种类型的布局,您不必担心性能.
>根据屏幕尺寸对图像进行运行时缩放 – 使用DisplayMetrics获取屏幕的大小和密度,并调整图像以适合屏幕.

最后一个选项在很多方面都是最灵活的,因为如果您最终得到的屏幕非常大或非常小,您可以进行调整,例如将按钮或文本移动到屏幕上的其他位置(上方或下方)其他内容).但是对于你的具体问题,任何一个都足够了.

上一篇:ansible-templates-jinja2


下一篇:android 根据分辨率对图像进行缩放