Android 开发笔记 一
參考 :?http://www.cnblogs.com/nightkidzxc/archive/2011/12/14/2379010.html
?
1.得到 SD 卡的目錄 :?
? String SDPATH = Environment.getExternalStorageDriectory() + "/";
2.Activity 相當于 From?
Activity 以 Dialog形式顯示在 Manifest中設置 : ?android:theme="@android:style/Theme.Dialog"
透明 Activity :Theme:android:style/Theme.Translucent
3.多線程改變UI :?
public MyThread extends Thread {
public void run() {
// 在這里做一些 耗時的操作
....
// 更新主界面的UI
// View.post(Runnable runnable)
TextView.post(new Runnable() {
public void run() {
textView.setText(".... something update....");
}
});
}
}
4. 讓程序可以向 SD 卡中寫入文件, 要在 manifest 中加入 (這兩個標簽 要寫在 application 標簽的前面)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
如果你的系統里有服務的話, 需要將服務注冊?
<service android:name=".BroadcastService"/>
5. Handler 與Thread 的個人理解的區別
Thread 是傳統的另開一個線程. 并將 一個 run() 方法 在這個線程中運行. 如果這個 run()方法結束. 那么這個 線程也將銷毀.
Handler 可以綁在一個HandlerThread 的線程上. HandlerThread 只是一個里面有 MessageQueue 及Looper的Thread. 也就是這個線程可以循環的處理接收到的消息,及提交上來的Runnable. ?這樣. 就可以隨時使用 Handler 去Post 一個耗時方法過去.讓它去執行,而不影響UI線程. 就相當于一個 主線程的一個助手一樣. 耗時費力的活兒 都由它(HandlerThread) 去做了. 主線程只負責處理 UI上面的一些操作. ? 這是個非常好的設計. ?因為 傳統的Thread 一般就是干完一個活就銷毀了, 如果過一段時間還有其它的耗時操作, 就又得重新去開一個新的線程. ?沒有這種. 只使用 一個 HandlerThread 線程. 想做什么的時候.直接將方法 (Runnable) Post 過去處理.來的聰明方便!
?
1 // Handler Thread 2 HandlerThread ht = new HandlerThread("Handler_Thread"); 3 // Handler 對像,并將 HandlerThread 的Looper傳進去,這樣工作就都在 Handler Thread 上進行了.要不然會自動的綁定到當前線程的Looper上 4 Handler handler = new Handler(ht.getLooper()); 5 6 protected void onCreate(Bundle saveInstanceState) { 7 super.onCreate(saveInstanceState); 8 context = this; 9 10 // 開啟 Handler Thread 線程 11 ht.start(); 12 // 向線程里 Post 任務 13 handler.post(new Runnable() { 14 15 @Override 16 public void run() { 17 // TODO Auto-generated method stub 18 19 } 20 }); 21 }?
?
?
?
6. adb shell 顯示 文件內內的命令是 : cat xxx.txt
7. 生成一個 XML Document?
// xml Document 
 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
得到 根結點 : doc.getDocumentElement();
要使用 Document 來 創建ELement, ?Element el = doc.CreateElement("elementName");
通過元素名得到 結點列表 NodeList nodList = Element.getElementsByTagName(tagName);
得到節點的屬性 String property = Element.getAttribute(propertyName);
遍歷NodeList :
NodeList nl = ?myXml.getElementsByTagName("user");
  for (int i = 0; i < nl.getLength(); i++) {
     Element el = (Element)(nl.item(i));
// 通過子節點名得到子節點的 Inner Text (Inner Text 也算為結點 ?.getFirstChild().getNodeValue())
String innerText = el.getElementsByTagName("subTagName").item(0).getFirstChild().getNodeValue();
}
?8. SAX 解釋?
// MyXmlHandler 繼承 DefaultHandler.
MyXmlHandler myhandler = new MyXmlHandler();
SAXParserFactory.newInstance().newSAXParser().parse(new File("d:/kao.xml"), myhandler);
9. ListView 中使用 SimpleAdapter 的使用:
public?SimpleAdapter?(Context?context,?List<??extends?Map<String,??>> data, int resource,?String[]?from, int[] to)
? ?構造函數 :
? ? ? context ? : 關聯SimpleAdapter運行著的視圖的上下文。
data ? ? ? : ?一個Map的列表。在列表中的每個條目對應列表中的一行,應該包含所有在from中指定的條目 ArrayList<HashMap<String,String>>().
resource ? : 每個Item對就的 XML布局文件
from ? ? ? ?: new String[] {"xx","xx"} ,是Map 里面的 Key 的名稱列表
to ? ? ? ? ? : new int[] {R.id.xx,R.id.xx...} 是與上面from 相對應的, 每個Key對應控件的ID.?
我們在 解釋XML文檔后. 一般會得到一個 ArrayList<UserModel> 這樣的一個列表. 先要能過它來生成一個 List<Map<String,Object>>. 也就是SampleAdapter 需要的數據 Data
ArrayList<UserModel> Users ;
List<Map<String,Object>> data = new List<Map<String,Object>>();
for(Iterator iter = Users.Iterator ; iter.hasNext()) {
UserModel um = (UserModel)iter.next();
Map<String,Object> map = new Map<String,Object>();
map.put("NAME",um.getName());
map.put("AGE",um.getAge());
data.add(map);
}
?得到了 Data 后. 我就就可以生成一個 SampleAdapter了
SimpleAdaper sa = new SimepleAdaper(this,data,R.layout.mylistview,new String[] {"NAME","AGE"},new int[] {R.id.name,R.id.age});
最后. 將 這個SimpleAdapter 綁定 ListView控件上即可
ListView.setAdapter(sa);
//? 這種直接 綁定的 Data 需要是在 項目的 res 文件中 也就是有R.id.xx的圖標文件, 但大多數時我們要從網絡或SD卡中提取要顯示的 圖標. 就不能直接這么用了. 你需要給 SimpleAdapter 設置一個ViewBinder ?
sa.setViewBinder(new ViewBinder() {
?public boolean setViewValue(View view, Object data,String textRepresentation) {
? ? ?if ((view instanceof ImageView) && (data instanceof Bitmap)) {
? ? ? ? ?ImageView iv = (ImageView)view;
? ? ? ? ?Bitmap bm = (Bitmap)data;
? ? ? ? ?iv.setImageBitmap(bm);
? ? ? ? return true;
? ? }
? ? return false;
?
});
設置完 ViewBinder 后, 再為 ListView設置 這個SimlpeAdapter
ListView.setAdapter(sa);
這樣就可以綁定 非res里的 外部數據了.?
?
10, 全屏及 隱藏標題欄狀態欄 (這些設置 要在 setContentView() 方法前設置)
 // 全屏
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 // 隱藏標題欄
 requestWindowFeature(Window.FEATURE_NO_TITLE);
// 隱藏狀態欄 (如果設定了全屏的話, 就已經隱藏了狀態欄了)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NO_STATUS_BAR, WindowManager.LayoutParams.FLAG_NO_STATUS_BAR);
轉載于:https://www.cnblogs.com/easyfrog/archive/2013/03/09/2951912.html
總結
以上是生活随笔為你收集整理的Android 开发笔记 一的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: PTA 二叉树路径
 - 下一篇: Android基础知识大纲