Material 图标:将 48dp 缩放到 144dp 的限制

Material Icons: Scaling 48dp to 144dp limitations

我正在尝试将 ic_library_books_black_48dp Material Icon 用作文件列表视图中的文件类型图标。

最大的可用文件,ic_library_books_black_48dp.png,密度如下

drawable-mdpi 
drawable-hpi 
drawable-xhdpi 
drawable-xxhdpi
drawable-xxxhdpi

由于图像文件类型显示缩略图预览,因此需要更大的图标以保持一致性。它们被调整为 144x144 dp:

<ImageView
    android:id="@+id/grid_item_iv"
    android:layout_width="144dp"
    android:layout_height="144dp"/>

这是 xhdpi 设备 上原型的放大视图:

注意:放大浏览器以查看像素差异。

我对提供的 xhdpi 分辨率不满意,所以我复制了 xxhdpi 和 xxxhdpi 版本,相应地重命名它们,并将它们放入 drawable-xhdpi 文件夹

resources
    drawable-xhdpi
        ic_library_books_black_48dp.png
        ic_library_books_black_48dp_xxhdpi.png
        ic_library_books_black_48dp_xxxhdpi.png

然后他们被分配到 GetView()

switch (fileType)
{
    case AttachmentFileType.FileType.Docs:
        iv.SetImageResource(Resource.Drawable.ic_library_books_black_48dp);
        break;
    case AttachmentFileType.FileType.Audio:
        iv.SetImageResource(Resource.Drawable.ic_library_books_black_48dp_xxhdpi);
        break;
    case AttachmentFileType.FileType.Images:
        iv.SetImageResource(Resource.Drawable.ic_library_books_black_48dp_xxxhdpi);
        break;
    default:
        iv.SetImageResource(Resource.Drawable.ic_attachment_test);
        break;
}

我更喜欢 ic_library_books_black_48dp_xxxhdpi.png 在我的 xhdp 设备上放大到 144x144 dp 的清晰度。 但是,这种方法不适用于更高密度的屏幕(xxhdpi、xxxhdpi ) 因为 xxxhdpi 是 ic_library_books_black_48dp.png 提供的最高版本。要支持 xxhdpi 和 xxxhdpi,我需要分别使用 xxxxhdpi 和 xxxxxhdpi 版本的图标(即 "two grades higher")。 有没有办法在不创建自定义图标的情况下完成这项工作(android studio 或编辑程序可以在保持像素密度的同时进行升级)?

一个棘手的方法是将 imageView 的 scaleType 设置为 fitcenter 并为您的 imageview 设置常量 width=144dp 和 height=144dp。它会将您的图标放大到 144dp

<ImageView
    android:layout_width="144dp"
    android:layout_height="144dp"
    android:scaleType="fitCenter"
    android:src="@drawable/ic_library_books_black_48dp"/>

如果可以的话,我会使用矢量图形。 Android Studio 直接支持它们。

File -> New -> Vector Graphic.

然后点击图标“搜索”...找到您的图书图标...

接下来完成它。 (此处无需更改任何内容)。

如果你超过 API 21,那么你就可以开始了,你可以像引用任何其他图标一样引用它。

如果您需要降低 APIs 的支持,请阅读 the official Android Documentation about Vector Drawables

此外,请阅读所有关于 Android Studio support here 的内容。

使用 imageView 的 scaleType 到 FIT_CENTER。 FIT_CENTER-使用 CENTER 缩放图像。 在 XML 个文件中

    android:scaleType="fitCenter"

或在您的 Activity class

 imgview.setScaleType(ImageView.ScaleType.FIT_CENTER);