`
zengxx1989
  • 浏览: 295033 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

android解析自定义XML,launcher替换默认图标

阅读更多

1 在attr中定义自己的样式   

 <declare-styleable name="ExtentalAPP">
        <attr name="ex_className" format="string" />
        <attr name="ex_packageName" format="string" />
        <attr name="ex_title" format="string" />
        <attr name="ex_icon" format="reference" />
    </declare-styleable>

 

 

2.定义自己的xml属性,注意com.android.test 为包名,launcher 为前缀
<applications xmlns:launcher="http://schemas.android.com/apk/res/com.android.test" >

    <application
        launcher:ex_className="com.android.browser.BrowserActivity"
        launcher:ex_icon="@drawable/samsung_browser_icon"
        launcher:ex_packageName="com.android.browser"
        launcher:ex_title="@string/extena_browser_title" />

3 解析 XML

 

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Xml;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExtentalApp extends Activity {

    String className;
    Drawable icon;
    String packageName;
    String title;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        loadExternalIconforXml();
    }

    public Map<String, ExtentalApp> loadExternalIconforXml() {
        Map<String, ExtentalApp> mapApp= new HashMap<String, ExtentalApp>();
        XmlPullParser xmlParser = getResources().getXml(R.xml.external_application);
        AttributeSet set = Xml.asAttributeSet(xmlParser);
        try {
            int eventType = xmlParser.getEventType();
            while (eventType != XmlResourceParser.END_DOCUMENT) {
                if (eventType == XmlResourceParser.START_TAG) {
                    switch (xmlParser.getDepth()) {
                        case 1:
                            break;
                        case 2:
                            TypedArray ta =  this.obtainStyledAttributes(set, R.styleable.ExtentalAPP);
                            ExtentalApp app = new ExtentalApp();
                            app.className = ta.getString(R.styleable.ExtentalAPP_ex_className);
                            app.packageName = ta.getString(R.styleable.ExtentalAPP_ex_packageName);
                            app.title = ta.getString(R.styleable.ExtentalAPP_ex_title);
                            app.icon = ta.getDrawable(R.styleable.ExtentalAPP_ex_icon);
                            mapApp.put(app.className, app);
                            break; 
                        default:
                            break;
                    }
                    
                }
                eventType = xmlParser.next();
            }

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException  ioe){
            ioe.printStackTrace();
        }
        return mapApp;
    }
}

  

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics