zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    里氏替换原则
    java简单选择排序
    通过登录窗体,登录不同的窗体,同时关闭登录窗体
    关于SQL中数据类型(float和real)和 .NET Framework 中数据类型(float和double)的问题
    129有确定性的有穷自动机
    大数据概述
    组合数据类型练习
    词法分析
    编译原理
    算法分析实验报告
  • 原文地址:https://www.cnblogs.com/easyfrog/p/2951912.html
Copyright © 2011-2022 走看看