編輯:關於Android編程
一、在assets文件中寫一個xml文件
[html] v
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>30</age>
</person>
<person id="20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>30</age>
</person>
<person id="20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
二、在service中寫一個SAX解析的類
[java]
package com.example.service;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.example.domain.Person;
public class XMLContentHandlerextends DefaultHandler{
//解析的person對象存儲到list集合中
private List<Person> persons;
//解析當前的person對象
public Person currentPerson;
//聲明標簽的名稱
public String tagName;
//獲取解析所有的person對象
public List<Person> getPersons() {
return persons;
}
@Override
public void characters(char[] ch,int start, int length)
throws SAXException {
super.characters(ch, start, length);
//首先判斷tagName是否為空
if(tagName!=null){
String data=new String(ch,start,length);
//判斷標簽是否為空
if(tagName.equals("name")){
currentPerson.setName(data);
}else if(tagName.equals("age")){//判斷標簽是否是age
currentPerson.setAge((short) Integer.parseInt(data));
}
}
}
@Override
public void endDocument()throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//當person標簽結束的時候把person對象存儲到集合中
if(localName.equals("person")){
persons.add(currentPerson);
currentPerson=null;
}
this.tagName=null;
}
/**
* 文檔開始觸發的事件
*/
@Override
public void startDocument()throws SAXException {
super.startDocument();
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//判斷解析的標簽是否是person
if(localName.equals("person")){
currentPerson=new Person();
//把id屬性的值解析出來 並且把id賦值給currentPerson對象
currentPerson.setId(Integer.parseInt(attributes.getValue(0)));
}
this.tagName=localName;
}
}
[java]
package com.example.service;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.example.domain.Person;
public class XMLContentHandler extends DefaultHandler{
//解析的person對象存儲到list集合中
private List<Person> persons;
//解析當前的person對象
public Person currentPerson;
//聲明標簽的名稱
public String tagName;
//獲取解析所有的person對象
public List<Person> getPersons() {
return persons;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
//首先判斷tagName是否為空
if(tagName!=null){
String data=new String(ch,start,length);
//判斷標簽是否為空
if(tagName.equals("name")){
currentPerson.setName(data);
}else if(tagName.equals("age")){//判斷標簽是否是age
currentPerson.setAge((short) Integer.parseInt(data));
}
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//當person標簽結束的時候把person對象存儲到集合中
if(localName.equals("person")){
persons.add(currentPerson);
currentPerson=null;
}
this.tagName=null;
}
/**
* 文檔開始觸發的事件
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//判斷解析的標簽是否是person
if(localName.equals("person")){
currentPerson=new Person();
//把id屬性的值解析出來 並且把id賦值給currentPerson對象
currentPerson.setId(Integer.parseInt(attributes.getValue(0)));
}
this.tagName=localName;
}
}
package com.example.service;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.example.domain.Person;
public class XMLContentHandler extends DefaultHandler{
//解析的person對象存儲到list集合中
private List<Person> persons;
//解析當前的person對象
public Person currentPerson;
//聲明標簽的名稱
public String tagName;
//獲取解析所有的person對象
public List<Person> getPersons() {
return persons;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
//首先判斷tagName是否為空
if(tagName!=null){
String data=new String(ch,start,length);
//判斷標簽是否為空
if(tagName.equals("name")){
currentPerson.setName(data);
}else if(tagName.equals("age")){//判斷標簽是否是age
currentPerson.setAge((short) Integer.parseInt(data));
}
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//當person標簽結束的時候把person對象存儲到集合中
if(localName.equals("person")){
persons.add(currentPerson);
currentPerson=null;
}
this.tagName=null;
}
/**
* 文檔開始觸發的事件
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//判斷解析的標簽是否是person
if(localName.equals("person")){
currentPerson=new Person();
//把id屬性的值解析出來 並且把id賦值給currentPerson對象
currentPerson.setId(Integer.parseInt(attributes.getValue(0)));
}
this.tagName=localName;
}
}
三、在Activity中獲取SAX類的操作
[java]
package com.example.lession03_xml;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.example.domain.Person;
import com.example.service.XMLContentHandler;
import com.example.service.XMLDomService;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputBinding;
import android.widget.Button;
import android.widget.Toast;
public class XmlActivityextends Activity {
//聲明組件
public Button btn_sax,btn_dom,btn_pull;
public XMLDomService xmlDomService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設置顯示的視圖
setContentView(R.layout.activity_xml);
xmlDomService=new XMLDomService();
//根據id獲取組件
btn_sax=(Button) findViewById(R.id.btn_sax);
btn_dom=(Button) findViewById(R.id.btn_dom);
btn_pull=(Button) findViewById(R.id.btn_pull);
//為按鈕注冊事件
btn_sax.setOnClickListener(new MyOnclickListener());
btn_dom.setOnClickListener(new MyOnclickListener());
btn_pull.setOnClickListener(new MyOnclickListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.xml, menu);
return true;
}
//匿名類
class MyOnclickListener implements OnClickListener{
@Override
public void onClick(View v) {
int id=v.getId();
switch (id) {
case R.id.btn_sax:
Toast.makeText(XmlActivity.this,"采用SAX解析", Toast.LENGTH_LONG).show();
try{
//SAX解析的工廠對象
SAXParserFactory factory=SAXParserFactory.newInstance();
//得到sax的解析器
SAXParser saxParser=factory.newSAXParser();
//創建handler對象
XMLContentHandler handlerService=new XMLContentHandler();
InputStream is=getAssets().open("csdn.xml");
//直接解析
saxParser.parse(is, handlerService);
//通過handlerService對象獲取
Toast.makeText(XmlActivity.this,"----"+handlerService, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
break;
case R.id.btn_dom:
InputStream is=null;
try{
//獲取讀取文件的輸入流對象
is=getAssets().open("csdn.xml");
//采用dom解析
List<Person> persons=xmlDomService.parseXML(is);
//簡單測試
//Toast.makeText(XmlActivity.this, ""+persons.get(0).getName(), Toast.LENGTH_LONG).show();
Toast.makeText(XmlActivity.this,"采用DOM解析"+persons.get(0).getName(), Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
break;
case R.id.btn_pull:
Toast.makeText(XmlActivity.this,"采用PULL解析", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
}
------------------------------------------------------------------------------------------------------------------
今天群裡邊有人問怎麼自定義Android holo主題下的Progressbar; 我想到之前做過自定義Progressbar,通過自己寫動畫和Style可以用任何圖片當
格式塔原理介紹Material Design 運用了格式塔原理,尤其是在圖形的設計上。 格式塔理論是心理學中為數不多的理性心理學之一。格式塔學派以某些相當抽象的,與知覺和
最近將電腦的操作系統換成了ubuntu,對於不習慣win8/win10的人來說ubuntu確實是一個不錯的選擇,基本的軟件都ok了,至於QQ什麼的,大家可以去找wine版
本文實例為大家分享了TextView繪制背景的方法,供大家參考,具體內容如下效果:實現流程:1.初始化:對畫筆進行設置mPaintIn = new Paint();mPa