[英]AndroidSVG: How to dynamically change Inkscape svg color
AndroidSVG允许动态颜色变化说明在这里。
以下代码适用于我的图标库的 95% ...
SVGImageView svgIV;
......
String color = "#FEFBDE"
svgIV.setCSS(String.format("* { fill:%s; }", color););
...但在 Inkscape SVG 上失败,例如:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="64"
height="64"
id="svg2"
style="display:inline">
<defs
id="defs4" />
<g
transform="translate(403.45398,-1106.6063)"
id="layer1"
style="display:inline">
<g
transform="matrix(7.6594323,0,0,7.6594323,2702.0005,-7795.5738)"
id="g3766">
<path
d="m -401.264,1167.506 0,2.8346 1.41732,0"
id="path4668"
style="fill:none;stroke:#000000;stroke-width:0.53149605;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
d="m -401.264,1162.5164 c 0,0 -0.5132,-0.012 -0.5132,0.6511 0,0.3318 0,0.1926 0,0.5423 0,0.3989 -0.64122,0.3626 -0.64122,1.0261 0,0.5996 0.047,0.4425 0,0.8135 -0.047,0.371 -0.76981,0.356 -0.76981,1.1045 0,0.9955 0.64122,0.8521 0.64122,0.8521 l 1.28301,0"
id="path4711-1"
style="fill:none;stroke:#000000;stroke-width:0.53149605;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
<path
d="m -401.264,1162.5164 c 0,0 0.5132,-0.012 0.5132,0.6511 0,0.3318 0,0.1926 0,0.5423 0,0.3989 0.64122,0.3626 0.64122,1.0261 0,0.5996 -0.047,0.4425 0,0.8135 0.047,0.371 0.76981,0.356 0.76981,1.1045 0,0.9955 -0.64122,0.8521 -0.64122,0.8521 l -1.28301,0"
id="path4711-1-3"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.53149605;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
</g>
</svg>
如果有的话,什么是必要的 CSS?
仔细想想,这可能是一个更普遍的 CSS 问题:如何覆盖样式的一部分?
通常(在 CSS 中)你会通过使用!important
标志来实现这!important
。
svgIV.setCSS(String.format("* { fill:%s !important; }", color););
不幸的是,AndroidSVG 中的 CSS 系统尚不支持!important
。 它在我的 TODO 清单上。
同时,您需要将这些 SVG 转换为使用属性( fill="whatever"
)或 CSS。 您可以轻松地将这些文件转换为使用属性形式,方法是将它们加载到 Inkscape 中并另存为“优化的 SVG”。
这个分叉是为了回答这个问题而创建的。
它允许通过用户定义的回调对任何.svg 进行全彩色控制,非常适合不希望手动转换 2,735 Inkscape 定义以符合当前限制的用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.