日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 开发笔记 一

發布時間:2023/12/18 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 开发笔记 一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。