setidandroid
㈠ 求教Android,動態添加到控制項能動態刪除嗎
可以的,android中使改侍散用布局是為了談知加快開發,最終控制項還是通過解析XML後,通過代碼添加的。
具體方法:
例如你的布局是一個Linearlayout linear;上面有一本Button btn1;
要刪除這個btn1要做的就是 linear.removeView( btn1 );
動態添加也是一樣的:
linear.addView( btn2 );
要注意的是,Button btn2 = new Button( context );這時候控制項是沒有大小的,必須設置控制項大小以後添加了才能看到。設置控制項大核氏小的方法是view.setLayoutParams();
希望能夠幫到你。
㈡ Android下如何取當前獲得焦點的控制項的ID
Android如何獲取動態添加控制項的id:RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.relaGameZhaiGuoZi);imgApple2 = new ImageView(this);imgApple2.setImageResource(R.drawable.app);imgApple2.setId(110);imgApple2.setOnClickListener(this);RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);lp1.leftMargin=30;lp1.topMargin = 100;mainLayout.addView(imgApple2,lp1);View類裡面有一個findFocus的成員函數,作用相當於找到以當前View為根的view層次結構中,獲得當前輸入焦點的view 。Android下如何取當前獲得焦點的控制項的ID
㈢ Android將這xml文件用sax方式解析怎麼弄
在 Android中解析XML文主要有三種方式,分別為Simple API for XML(SAX)、Document Object Model(DOM)和Android附帶的PULL解析器。其中SAX是一個解析速度非常快並且佔用內存少的XML解析器,非常適合Android手機等移動設備。
SAX解析XML文件採用事件驅動的方式進行,也就是說,SAX是逐行掃描文件,遇到符合條件的設定條件後就會觸發特定的事件,回調你寫好的事件處理程序。使用SAX的優勢在於其解析速度較快,佔用內存較少(相對於DOM而言)。而且SAX在解析文件的過程中得到自己需要的信息後可以隨時終止解析,並不一定要等文件全部解析完畢。凡事有利必有弊,其劣勢在於SAX採用的是流式處理方式,當遇到某個標簽的時候,它並不會記錄下以前所遇到的標簽,也就是說,在處理某個標簽的時候,比如在 startElement方法中,所能夠得到的信息就是標簽的名字和屬性,至於標簽內部的嵌套結構,上層標簽、下層標簽以及其兄弟節點的名稱等等與其結構相關的信息都是不得而知的。實際上就是把XML文件的結構信息丟掉了,如果需要得到這些信息的話,只能你自己在程序里進行處理了。所以相對DOM而言,SAX處理XML文檔沒有DOM方便,SAX處理的過程相對DOM而言也比較復雜。
使用SAX解析XML文件一般有以下五個步驟:
1、創建一個SAXParserFactory對象(通過類名很容易得知它利用工廠方法模式實現的);
2、調用SAXParserFactory中的newSAXParser方法創建一個SAXParser對象;
3、然後在調用SAXParser中的getXMLReader方法獲取一個XMLReader對象;
4、在XMLReader中注冊事件處理介面,一般有ContentHandler、ErrorHandler、DTDHandler、EntityHandler四種;
5、調用XMLReader中的parse方法解析指定的XML字元串對象;
步驟四中提到的四個Handler是事件處理介面,SAX的事件處理函數就定義在這四個介面中,利用SAX解析XML文件需要重寫介面中的方法。其中ContentHandler用來處理XML中的內容,ErrorHandler用來處理錯誤,DTDHandler用來處理DTD,EntityHandler用來處理XML文檔中的實體;最常用的是ContentHandler這個介面,下面是該介面中的一些常用方法:
startDocument()
當遇到文檔的開頭的時候,調用這個方法,可以在其中做一些預處理的工作。
endDocument()
和上面的方法相對應,當文檔結束的時候,調用這個方法,可以在其中做一些善後的工作。
startElement(String uri, String localName, String qName, Attributes atts)
當讀到一個開始標簽的時候,會觸發這個方法。uri是命名空間(通過xmlns聲明),localName是不帶命名空間前綴的標簽名,qName是帶命名空間前綴的標簽名。通過atts可以得到所有的屬性名和相應的值。注意,如果沒有指定Namespace,則qName可能為空,當然不同的SAX實現會有所不同,比如在Android中qName為空,而J2SE中localName為空,所以想要總是得到標簽名,就需要檢查這兩個參數的值了。
endElement(String uri, String localName, String name)
這個方法和上面的方法相對應,在遇到結束標簽的時候,調用這個方法。
characters(char[] ch, int start, int length)
這個方法用來處理在XML文件中讀到的內容,第一個參數為文件的字元串內容,後面兩個參數是讀到的字元串在這個數組中的起始位置和長度,使用new String(ch,start,length)就可以獲取內容。
下面是利用SAX解析XML文件的DEMO程序,首先定義一個XML文件users.xml,內容如下:
01 <?xml version="1.0" encoding="utf-8"?>
02 <users>
03 <user id="1">
04 <name>wuxianglong</name>
05 <password>199098</password>
06 </user>
07 <long:user id="2">
08 <name>wuwenyuan</name>
09 <password>199189</password>
10 </long:user>
11 </users>
其中第二個user標簽中字元串long就是所謂的前綴,標簽中的id則是該標簽的一個屬性。
然後我們來實現ContentHandler這個介面,並重寫其中的方法來處理上面的XML文件,代碼如下:
01 package sax.test;
02
03 import java.util.ArrayList;
04
05 import org.xml.sax.Attributes;
06 import org.xml.sax.SAXException;
07 import org.xml.sax.helpers.DefaultHandler;
08
09 public class MyHandler extends DefaultHandler {
10 private ArrayList<User> users;
11 private User user;
12 private String content;
13
14 public ArrayList<User> getUsers() {
15 return users;
16 }
17
18 @Override
19 public void startDocument() throws SAXException {
20 super.startDocument();
21 users = new ArrayList<User>();
22 System.out.println("----------Start Parse Document----------" );
23 }
24
25 @Override
26 public void endDocument() throws SAXException {
27 System.out.println("----------End Parse Document----------" );
28 }
29
30 @Override
31 public void characters(char[] ch, int start, int length)
32 throws SAXException {
33 super.characters(ch, start, length);
34 // 獲得標簽中的文本
35 content = new String(ch, start, length);
36 }
37
38 @Override
39 public void startElement(String uri, String localName, String qName,
40 Attributes attributes) throws SAXException {
41 super.startElement(uri, localName, qName, attributes);
42 // 列印出localname和qName
43 System.out.println("LocalName->" + localName);
44 System.out.println("QName->" + qName);
45 if ("user".equals(localName)) {
46 user = new User();
47 user.setId(Integer.parseInt(attributes.getValue("id")));
48 }
49 }
50
51 @Override
52 public void endElement(String uri, String localName, String qName)
53 throws SAXException {
54 super.endElement(uri, localName, qName);
55 if ("name".equals(localName)) {
56 user.setName(content);
57 } else if ("password".equals(localName)) {
58 user.setPassword(content);
59 } else if ("user".equals(localName)) {
60 users.add(user);
61 }
62 }
63 }
最後我們編輯TestSAX這個類,獲取users.xml這個文件中的內容,並利用SAX進行解析,代碼如下:
01 package sax.test;
02
03 import java.io.IOException;
04
05 import javax.xml.parsers.ParserConfigurationException;
06 import javax.xml.parsers.SAXParser;
07 import javax.xml.parsers.SAXParserFactory;
08
09 import org.xml.sax.InputSource;
10 import org.xml.sax.SAXException;
11 import org.xml.sax.XMLReader;
12
13 import android.app.Activity;
14 import android.os.Bundle;
15 import android.widget.TextView;
16
17 public class TestSAX extends Activity {
18 private TextView text;
19
20 /** Called when the activity is first created. */
21 @Override
22 public void onCreate(Bundle savedInstanceState) {
23 super.onCreate(savedInstanceState);
24 setContentView(R.layout.main);
25
26 text = (TextView) findViewById(R.id.result);
27
28 try {
29 // 創建一個工廠對象
30 SAXParserFactory factory = SAXParserFactory.newInstance();
31 // 通過工廠對象得到一個解析器對象
32 SAXParser parser = factory.newSAXParser();
33 // 通過parser得到XMLReader對象
34 XMLReader reader = parser.getXMLReader();
35 // 為reader對象注冊事件處理介面
36 MyHandler handler = new MyHandler();
37 reader.setContentHandler(handler);
38 // 解析指定XML字元串對象
39 reader.parse(newInputSource(TestSAX.class.getClassLoader().getResourceAsStream("users.xml")));
40
41 String usersInfo = "";
42 for (User user : handler.getUsers()) {
43 usersInfo += "ID->" + user.getId() + "\n";
44 usersInfo += "NAME->" + user.getName() + "\n";
45 usersInfo += "PASSWORD->" + user.getPassword() + "\n";
46 usersInfo += "\n\n";
47 }
48 text.setText(usersInfo);
49 } catch (SAXException e) {
50 e.printStackTrace();
51 } catch (ParserConfigurationException e) {
52 e.printStackTrace();
53 } catch (IOException e) {
54 e.printStackTrace();
55 }
56 }
57
58 }
㈣ android開發 如何在相對布局中動態添加控制項
首先setMargin方法不是RelativeLayout的方法,而是RelativeLayout.LayoutParams的方法。
你應該這麼用:
RelativeLayout layout = new RelativeLayout(this);
layout.setLayoutParams(new RelativeLayout.LayoutParams(-1, -1));
TextView mView = new TextView(this);
mView.setId(2);
mView.setText("this is a test text!");
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
-2, -2);
// layoutParams.setMargins(100, 100, 100, 100);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, -1);
layout.addView(mView, layoutParams);
上例是將一個TextView添加到RelativeLayout的底部。你可以把注釋行取消掉,把下一行注釋,再看下效果。
㈤ android 如何動態布局自定義view,不用XML.
可以直接new View來得到View對象來實現代碼布局。以下為示例代碼:
1.絕對布局
AbsoluteLayout abslayout=new AbsoluteLayout (this);
setContentView(abslayout);
Button btn1 = new Button(this);
btn1.setText(」this is a button」);
btn1.setId(1);
AbsoluteLayout.LayoutParams lp1 =
new AbsoluteLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0,100);
abslayout.addView(btn1, lp1);
2.相對布局
RelativeLayout relativeLayout = new RelativeLayout(this);
setContentView(relativeLayout);
AbsoluteLayout abslayout=new AbsoluteLayout (this);
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
relativeLayout.addView(abslayout ,lp1);
3.線性布局
LinearLayout ll = new LinearLayout(this);
EditText et = new EditText();
ll.addView(et);
//動態添加布局的方法1. LinearLayout ll = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main1,null); setContentView(ll); LinearLayout ll2 = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main2,ll); //這樣 main2 作為 main1的子布局 加到了 main1的 根節點下
//動態添加布局的方法2 addView. LinearLayout ll = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main1,null); setContentView(ll); LinearLayout ll2 = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main2,null); ll.addView(ll2);
㈥ android問題:cursor查找出來的數據如何綁定到listview
從你的問題中我總結出來的知識點包括:
cursor查詢資料庫中的數據
AsyncTask非同步操作
創建listview有關的Adapter適配器
大體流程操作如下:
由於資料庫操作屬於耗時操作,因此要放在非同步線程中執行,cursor在查詢出數據以後,封裝到集合當中,這就需要我們首先定義出一個實體類bean。bean中包含你從資料庫中cursor出來的欄位。查詢出來的欄位封裝到bean中,然後通過Adapter適配器將插敘出來的數據進行顯示。
下面寫出關鍵代碼:
cursor查詢資料庫
Cursorcursor=database.rawQuery("select*from表名where欄位='查詢欄位'",null);
代碼封裝到bean中:
while(cursor.moveToNext()){
Beanbean=newBean();
bean.setId(cursor.getString(0));
bean.setName(cursor.getString(1));
XXXX.add(XXXXbean);
}
創建Adapter適配器:
listViewAdapter=newListViewAdapter(this,XXXX);//創建適配器
XXXX_list.setAdapter(listViewAdapter);
bean實體類代碼、Adapter設置數據代碼略
㈦ 關於android下面的xml解析
我用的是PULL解析,SAX,dom感覺都沒PULL好用
public class XmlParseService
{
public static List<Person> pullXML(InputStream in)
{
try
{
//創建一個PULL解析對象
//1)XmlPullParser parse= Xml.newPullParser();
XmlPullParserFactory xmlfactory=XmlPullParserFactory.newInstance();
XmlPullParser parse=xmlfactory.newPullParser();
parse.setInput(in, "utf-8");
int eventCode=parse.getEventType();
Person person = null;
List<Person> list = null;
while(eventCode!=XmlPullParser.END_DOCUMENT)
{
switch(eventCode)
{
//開始解析文檔
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
System.out.println("1111111開始文檔的解析");
break;
case XmlPullParser.START_TAG:
System.out.println("2222222開始解析標記");
if("person".equals(parse.getName()))
{
person = new Person();
person.setId(parse.getAttributeValue(0));
}
else
{
if("name".equals(parse.getName()))
{
person.setName(parse.nextText());
}
else if("age".equals(parse.getName()))
{
person.setAge(parse.nextText());
}
}
break;
case XmlPullParser.END_TAG:
System.out.println("33333333結束解析標記");
if("person".equals(parse.getName()))
{
if(person!=null)
{
list.add(person);
person = null;
}
}
break;
}
eventCode = parse.next();
}
in.close();
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
你自己創建一個XML,我用實體類PERSON封裝的