美文网首页
解析指定节点的xml

解析指定节点的xml

作者: 霁逸lei | 来源:发表于2022-01-14 08:52 被阅读0次
xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Color name="颜色配置">

    <A name="A">
        <Node name="BackColor" describe="顶部工具栏的背景颜色" R="233" G="48" B="48" A="0.3" />
    </A >

    <B name="B">
        <Node name="backColor" describe="底部工具栏的背景颜色" R="0" G="0" B="0" />
    </B>
    
</Nodes>

java代码
HashMap<String,Integer> colorMap = new HashMap<>();
private void loadColorXml(String basePath, String startTag) {
    String path = String.format("%s/skin/%s/color_set.xml", basePath, getSkin());
    try {
        FileInputStream fis = new FileInputStream(path);
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(fis, "UTF-8");
        int type = parser.getEventType();
        boolean startParser= false;
        while (type != XmlPullParser.END_DOCUMENT) {
            switch (type) {
                case XmlPullParser.START_TAG: {
                    String szName = parser.getName();
                    if (szName.equals(startTag)){
                        startParser = true;
                    }
                    //未到起始节点直接跳过
                    if (!startParser){
                        break;
                    }
                    if (szName.equals("Node")) {
                        String name = parser.getAttributeValue(null, "name");
                        String red = parser.getAttributeValue(null, "R");
                        String green = parser.getAttributeValue(null, "G");
                        String blue = parser.getAttributeValue(null, "B");
                        String alpha = parser.getAttributeValue(null, "A");
                        colorMap.put(startTag + "_" + name,getColorByRgb(red,green,blue,alpha ));
                    }
                }
                break;
                case XmlPullParser.END_TAG: {
                    String szName = parser.getName();
                    if (szName.equals(startTag)) {
                        return;
                    }
                }
                break;
            }
            type = parser.next();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private int getColorByRgb(String red,String green,String blue,String alpha){
    Integer r = Integer.valueOf(red);
    Integer g = Integer.valueOf(green);
    Integer b = Integer.valueOf(blue);
    int a = TextUtils.isEmpty(alpha) ? 255 : (int)(Float.valueOf(alpha) * 255);
    return Color.argb(a,r,g,b);
}

解析{"rgb":"FFFFFF","alpha":"0.2"}
String rgb = colorJson.optString("rgb");
String alpha = colorJson.optString("alpha");
int alphaValue = (int) (Float.parseFloat(alpha) * 255);
int color = (!TextUtils.isEmpty(rgb)) ? Integer.parseInt(rgb, 16) : originalColor;
return (color | alphaValue << 24);

相关文章

网友评论

      本文标题:解析指定节点的xml

      本文链接:https://www.haomeiwen.com/subject/wpegqrtx.html