Android 相同的DPI但不同的英寸尺寸

Android 相同的DPI但不同的英寸尺寸,android,android-layout,resolution,dpi,mdpi,Android,Android Layout,Resolution,Dpi,Mdpi,我知道互联网上充斥着关于DPI px英寸等问题。 但在谷歌搜索了几个小时后,我的情况似乎没有发生在任何人身上 我有两台使用android studio定制的设备,它们都是mdpi。 但是一个设备是3.65英寸,另一个设备是10.1英寸 我已经创建了一个文件夹,其中包含2个图像250x125,dpi设置为160 dpi 如果通常我会用dp单位而不是像素在XML中声明我的2个图像…我会假设在两个屏幕上的结果应该是相同的,对吗 好吧,看起来图像保持不变,并且看不出设备有多少英寸 因此,为了澄清问题:

我知道互联网上充斥着关于DPI px英寸等问题。 但在谷歌搜索了几个小时后,我的情况似乎没有发生在任何人身上

我有两台使用android studio定制的设备,它们都是mdpi。 但是一个设备是3.65英寸,另一个设备是10.1英寸

我已经创建了一个文件夹,其中包含2个图像250x125,dpi设置为160 dpi

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

好吧,看起来图像保持不变,并且看不出设备有多少英寸

因此,为了澄清问题: 我必须在我的资源或代码中更改什么,以使我的布局在不同的英寸尺寸下具有相同的缩放比例

这是我的mdpi 10.1平板电脑的良好布局:

这是我的mdpi 3.65设备的糟糕布局

我怎样才能做到即使在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预先

不需要设计两个xml布局

您可以根据设备使用边距和填充尺寸

您正在为边距提供静态值

在每个设备的值文件夹中使用dimen.xml

layout.xml中的以下代码适用于您。

android:layout_marginLeft="@dimen/margin_button"
dimen.xml的值文件夹名称:

值mdpi
值hdpi
值xhdpi
值xxhdpi
值-sw600dp

在每个values文件夹中创建dimen.xml。

android:layout_marginLeft="@dimen/margin_button"
在dimen.xml中,您必须在“所有值”文件夹中定义边距值,但该属性的值因设备大小而异,如下所示:

值mdpi

<dimen name="margin_button">20dp</dimen>
20dp
值hdpi

<dimen name="margin_button">23dp</dimen>
23dp

就像所有值文件夹中的wise一样。

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

您的图像是250x125,宽250像素,高125像素

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

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

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

  • 调整图像的大小,并提供2个图像资产(或更多用于更广泛的屏幕)。这就是为什么您可以为mdpi、hdpi、xhdpi等设置资源文件夹的原因。您可以调整图像中的像素以适应屏幕大小

  • 使用“加权”
    LinearLayout
    ,根据可用屏幕空间调整所提供空间的大小。对于这种类型的布局,您不必担心性能

  • 根据屏幕大小对图像进行运行时缩放-使用
    DisplayMetrics
    获取屏幕的大小和密度,并调整图像以适合屏幕


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

    谢谢大家的回答。由于@Iacs的回答,我发现我必须更改文件夹结构

    我完全忽略了一个事实,即在/res文件夹中可以有更多的目录,而不仅仅是标准的“layout”目录。您可以使用以下名称创建其他目录:layout large、layout xlarge、layout small等等。。。 在这些文件夹中,您可以粘贴layout.xml并调整值

    这就是我的android工作室现在的情况 请注意布局文件夹结构:


    当然,现在我的两台设备都具有相同的DPI,但屏幕大小不同,它们以我希望的方式显示我的按钮!

    仔细查看您的按钮大小。这些按钮大小保持不变。但由于屏幕大小不同,小的一个看起来像按钮,占据了屏幕的大部分。实际上,您需要设计两个xml布局。一个用于平板电脑和一个用于手机。因此,对于市场上手机或平板电脑的每种可能大小,我都需要创建不同的xml文件?这是maddnes xo!!您对Android中UI布局的理解是不正确的-按钮或其他UI组件与屏幕尺寸成线性比例是完全没有意义的。请咨询和myriad的教程网站,以了解更多关于它。我不明白这如何可以是一个解决方案?你能更具体的请?