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/p/2951912.html