这是我的第一个 SO 问题所以请不要活着吃掉我......这是我的问题:
我通过 Android Studio 1.4 的新选项导入了几个图标 - New/Vector Asset
.如您所知,它可以让您轻松导入和使用矢量绘图并创建 png 以与 API <21 兼容。它将 png 放在文件夹中 app/build/generated/res/pngs/debug/drawable-<density>
(mdpi、ldpi、hdpi 等)。它还会生成 -v21
所有文件夹的版本,并将矢量可绘制 .xml 放在那里。
当我想为其中一个图标添加波纹效果时,问题就开始了。我已经将 .... 无纹波版本放入我的 res/drawable
中文件夹。它看起来像这样:
drawable/ic_settings.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFF"
android:pathData="M12,15.5A3.5,3.5 ...blablabla notimportatnt"/>
</vector>
然后我想给 API >21 中的图标添加波纹。所以到文件夹 res/drawable-v21
我添加了这个可绘制对象:
drawable-v21/ic_settings.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight">
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFF"
android:pathData="M12,15.5A3.5,3.5 0,0....blah blah blah"/>
</vector>
</item>
</ripple>
现在,当我在 API 21 下运行应用程序时,而不是使用来自 drawable-v21
的资源它使用来自 app/build/generated/res/pngs/debug/drawable-xxhdpi-v21
的可绘制对象根据res/drawable
中的文件自动生成.所以没有纹波。
当我试图从 res/drawable/
中删除无纹波文件时,涟漪在 API 21 中恢复,但应用程序当然会在 APIs<21
然后我试着把ripple版的图标放到了res/drawable
文件夹,希望 gradle 会自动生成 png。不 - <ripple>
标签阻止 gradle 生成 png 和应用程序崩溃 <21。
有人遇到过这种问题吗?知道如何向图标添加波纹吗?
祝你有美好的一天!
最佳答案
好的,我找到了解决方案。
在文件夹 res/drawable
中,我只留下了可以并且应该自动转换为 png 的矢量 - 所以只有没有波纹的普通普通图标。然后在 drawable_v21
中,我放入了 drawable 的波纹版本并重命名为 - ic_settings_ripple.xml
。我创建了一个新文件夹 layout-v21
并复制了我的布局,但我使用的不是 ic_settings.xml
ic_settings_ripple.xml
。
所以现在在 API<21 下,应用程序使用 gradle 生成的无波纹 png,并且在 API>=21 有一个替代布局,它使用其中一个图标的波纹版本。
关于安卓工作室 1.4 : drawable-v21 ignored when using "File/New/Vector Asset" option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224000/