如何正确创建资产?

How to properly create assets?

我在为 Android 创建设计时遇到了困难。 根据我发现的一些信息,MDPI 屏幕的比例因子为 1,因此我创建了一个 48dp = 48px 的图像并将其保存在 mdpi 文件夹中,然后使用正确的比例因子,我将它保存在各个地方。

现在,我想要一个与我的图像高度相同的按钮,当然,在我的布局中我可以声明一个 48dp 高度的按钮,但是,当在其他屏幕上使用时(比如 XXHDPI)图像和按钮的高度不再相同。

编辑:添加了按钮的布局

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp">
    <Button
        android:id="@+id/btnCamera"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@drawable/logon_camera_button"
        android:text="@string/logon_scanQrCode"
        android:textColor="#ffffff"
        android:textSize="20sp"
        android:layout_marginLeft="48dp"
        android:layout_marginRight="25dp"
        android:gravity="center" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/btnCamera"
        android:layout_alignLeft="@+id/btnCamera"
        android:id="@+id/imgCamera"
        android:src="@drawable/camera" />
</RelativeLayout>

有人对这个话题有什么建议吗?

亲切的问候

如果您的按钮背景是 ShapeDrawable 支持的形状,那么您可以通过在 drawable 文件夹中创建 xml 并将其设置为您的按钮背景来创建一个。请参阅下面的 ShapeDrawable 示例

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#f0600000"/>
    <stroke android:width="3dp" android:color="#ffff8080"/>
    <corners android:radius="3dp" />
    <padding android:left="10dp" android:top="10dp"
        android:right="10dp" android:bottom="10dp" />
</shape>

如果它是任何其他形状或带有文本,您可以创建它的 NinePatch 图像,这样文本不会根据屏幕分辨率仅拉伸没有文本拉伸的部分。建议使用 android:text 属性 添加文本,并使用 android:textSize 在 sp 中指定文本大小。所以你可以添加一个没有文本的图像并设置补丁,因为只有线条部分被拉伸而不是图像中的曲线(如果有的话)。

你可以添加一个res/values-xlarge/styles.xml

<style name="height">
    <item name="android:height">50dp</item>
</style>

具有不同的设备屏幕值 - xxlarge、值 - 小等,值

并将此样式添加到您的按钮

  style="@style/height"

首先删除要在视图中设置的图像。然后下载 this 软件。并在该软件 xxhdpi 上设置输入密度。并勾选所有选项。然后 9patch 调整图像大小。并将它们放在 drawable 中并设置为查看。就是这样。

总是从您要支持的最高分辨率开始。 xxhdpi 的缩放系数为 3,因此您的 xxhdpi 图像版本应为 144px.

现在有很多 xxxhdpi 设备,所以您可能应该选择 48 * 4 = 192px。只需将最高分辨率的图像放入 -xxxhdpi 文件夹(将 mdpi 和其他内容留空),然后让自动缩放来完成它。当您在 dp.

中分配大小时,请记住 x4 乘数

例如如果你想保持按钮高度和图像高度的 1:1 比率,并且你的图像在 xxxhdpi 桶中是 192px -- 按钮应该是 48dp.

在那种情况下,比如说,在 xxhdpi 上,图像将缩放 3/4 为 144xpx,而 48dp 按钮高度将缩放 3,并且也是 144px。对于 xhdpi,这将分别为 1/2 和 2,两者都会导致 96px.

如果您发现自动缩放的图形在某些密度下看起来很糟糕,请为该密度提供手动调整的资源。

不需要为不同的密度提供自定义 styles/dimensions——那是因为当你的 [按比例调整大小] UI 在某些密度上看起来不太好并且你决定通过使用不同的比例。例如,如果某个元素的基线(又名 mdpi)大小为 24px,在 ldpi 上变为 12px,这可能太小了,因此对于 ldpi 你将其设置为 36dp=18px(使用自定义版本的样式,或者最好是尺寸),这可能会稍微破坏 UI 比例,但看起来可能会更好。