4

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

我有 2 个使用 android studio 自定义构建的设备,它们都是 mdpi。但是一个设备是 3.65 英寸,另一个设备是 10.1 英寸。

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

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

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

所以要明确一点:我必须对我的资源或代码进行哪些更改,以便我的布局在不同英寸尺寸下的缩放比例相同?

这是我的 mdpi 10.1 平板电脑的 GOOD 布局: 在此处输入图像描述

这是我的 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>

我很绝望......提前谢谢

4

3 回答 3

3

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

您有一个 250x125 的图像 - 即 250 像素宽 x 125 像素高。

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

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

如果您希望较小的屏幕看起来像较大的屏幕,那么您有以下三种选择:

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

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

  3. 根据屏幕大小对图像进行运行时缩放 - 用于DisplayMetrics获取屏幕的大小和密度,并调整图像以适当地适应屏幕。

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

于 2015-11-08T07:06:48.547 回答
3

There is no need of Designing two xml layout.

You can use Dimension for margin and padding according to device.

You are giving static value for margin.

Use dimen.xml in value folder each device.

Following code in your layout.xml will work for you.

android:layout_marginLeft="@dimen/margin_button"

Value folder name for dimen.xml:

values-mdpi
values-hdpi
values-xhdpi
values-xxhdpi
values-sw600dp

create dimen.xml in each values folder.

and in dimen.xml you have to define value for margin in all values folder but value of that property is different according to device size like this:

values-mdpi

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

values-hdpi

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

like wise in all values folders.

于 2015-11-08T06:34:26.483 回答
0

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

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

这就是我的 android studio 中现在的样子,注意布局文件夹结构: 在此处输入图像描述

现在,当然,我的两台 DPI 相同但屏幕尺寸不同的设备正在以我希望它们显示的方式显示我的按钮!

于 2015-11-08T07:31:47.000 回答