ImageView 在平板电脑和 phone 上看起来一样

ImageView to look the same on tablet and phone

我有一个位于卡片视图中的图像视图,用于创建圆形图像。在智能 phone 上,我希望图像的大小为 250 和 250dp,假设这大约是我的 phone 宽度的 80%。

在平板电脑上,我希望图片占平板电脑宽度的 80% 左右,并且高度也必须与宽度相匹配。实现它的最佳方法是什么。谢谢?

以下是我手动设置 250dp 宽度和高度的代码,在 smartphone 上看起来不错,但对于平板电脑来说太小了。

<android.support.v7.widget.CardView
    android:id="@+id/cardView"
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:elevation="12dp"
    app:cardCornerRadius="125dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9"
    android:layout_marginTop="20dp">
    <ImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:id="@+id/image_album_art"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">
    </ImageView>
</android.support.v7.widget.CardView>

你可以做的是创建一个 layout 类型的文件夹,即 layout-large,然后从 layout 文件夹中复制布局并将其粘贴到 layout-large 文件夹中,然后根据屏幕尺寸设置高度和宽度平板电脑的 ie 可能是 450dp 左右,请检查一下!

Android 旨在让这一切变得简单。如果您希望资源根据设备配置(即屏幕尺寸)发生变化,您可以在特定目录中定义该资源:

res/layout-sw720dp - large (9"-10") tablets
res/layout-sw600dp - small (7"-8") tablets
res/layout - all other devices

当您将 -sw600dp 附加到目录名称时,这意味着 "smallest width 600 dp"。这意味着该目录适用于屏幕宽度为 600dp 或更大的设备。 "Smallest width" 表示屏幕的哪一侧较小,因此无论是纵向还是横向,1067dp x 600dp 的屏幕都算作具有 600dp 的最小宽度。

您可以为每个配置复制整个布局文件,并将其放入上述每个目录中。但是,如果除了视图大小之外所有文件都相同,您将会有很多重复代码。如果您需要进行更改,则必须在所有三个文件中进行更改,这可能会导致错误。

您可以定义一个根据配置而变化的维度,而不是拥有多个布局。布局进入 res/layout/,尺寸进入 res/values/

新建一个XML文件dimensions.xml,放到res/values目录下。像这样为其添加一个新维度:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="album_art_size">250dp</dimen>
</resources>

这将是手机会看到的文件。

然后,再创建两个 values 目录并向它们附加最小宽度限定符,因此您有 res/valuesres/values-sw600dpres/values-sw720dp。将 dimensions.xml 复制到这两个新目录中。然后,您可以修改每个文件中的 album_art_size 尺寸,当您的应用程序在不同的屏幕尺寸上运行时,它将看到适当的 dimensions.xml 文件。

最后要做的是将布局指向刚刚创建的 album_art_size 维度。将 250dp 替换为 @dimen/album_art_size:

android:layout_width="@dimen/album_art_size"
android:layout_height="@dimen/album_art_size"

这将允许您为每个设备类别选择特定的尺寸,这应该让您足够接近 80% 的屏幕尺寸目标。如果您正好需要屏幕宽度的 80% 和一个正方形视图,则需要 fiddle 和 ImageView 的 scaleTypeadjustViewBounds 属性或编写一些 Java 代码。