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; } }