<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Qdafengzi</title>
  
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="http://qdafengzi.github.io/"/>
  <updated>2017-11-20T16:31:21.090Z</updated>
  <id>http://qdafengzi.github.io/</id>
  
  <author>
    <name>Qdafengzi</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>01_Kotlin引入</title>
    <link href="http://qdafengzi.github.io/2017/11/20/01.Kotlin%E5%BC%95%E5%85%A5/"/>
    <id>http://qdafengzi.github.io/2017/11/20/01.Kotlin引入/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:31:21.090Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Kotlin引入"><a href="#Kotlin引入" class="headerlink" title="Kotlin引入"></a>Kotlin引入</h3><p>1.在线运行环境：<br>​<br>    <a href="https://try.kotlinlang.org" target="_blank" rel="noopener">https://try.kotlinlang.org</a></p><p>2.安装运行环境并配置<br>​<br>    <a href="https://github.com/JetBrains/kotlin/releases/tag/v1.1.50" target="_blank" rel="noopener">https://github.com/JetBrains/kotlin/releases/tag/v1.1.50</a></p><p>3.REPL环境</p><pre><code>read-eval-print loop交互式解释环境所有的命令都是以:开头</code></pre><p>4.在命令行运行脚本文件<br>​<br>    文件扩展名为.kts<br>    kotlinc -script test.kts<br>5.在浏览器中运行Kotlin程序<br>​<br>6.如何在Node.js中运行Kotlin程序<br>​<br>    转换为JavaScript后用<br>7.在微信小程序中运行Kotlin程序<br>​<br>    现在最大的小程序包不能超过3M<br>8.Kotlin语法糖<br>​<br>    JVM（byte code）</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;Kotlin引入&quot;&gt;&lt;a href=&quot;#Kotlin引入&quot; class=&quot;headerlink&quot; title=&quot;Kotlin引入&quot;&gt;&lt;/a&gt;Kotlin引入&lt;/h3&gt;&lt;p&gt;1.在线运行环境：&lt;br&gt;​&lt;br&gt;    &lt;a href=&quot;https://try.kot
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>02_Kotlin基础知识</title>
    <link href="http://qdafengzi.github.io/2017/11/20/02.Kotlin%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/"/>
    <id>http://qdafengzi.github.io/2017/11/20/02.Kotlin基础知识/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:31:48.645Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Kotlin基础知识"><a href="#Kotlin基础知识" class="headerlink" title="Kotlin基础知识"></a>Kotlin基础知识</h3><p>1.定义变量和常量<br>​<br>    变量var<br>    var n:Int = 30<br>    var ok:Int<br>    var abc = 124<br>    var s = “abc”</p><pre><code>常量val        val m:Int = 124位置不同：在Kotlin中数据类型放到变量后面，并用:分割变量用var 常量用valKotlin内置类型首字母都是大写的Kotlin可以根据右侧初始化的值自动推导数据类型，初始化可以不写数据类型</code></pre><p>2.定义函数<br>​<br>    函数头，主要包括函数名和标识函数的关键字<br>    参数，包括参数名和参数类型<br>    返回值，包括返回值的类型，如果没有返回值</p><pre><code>有返回值fun add(m:Int,n:Int):Int{    return m + n}无返回值fun process(m:Int):Unit{    println(m)}无返回值fun process(m:Int){    println(m)}</code></pre><p>3.注释</p><pre><code>和Java区别是多行注释可以嵌套</code></pre><p>4.数据类型<br>​<br>    数据类型   占用字节数<br>    Double            8<br>    Float          4<br>    Long              8<br>    Int                4<br>    Short          2<br>    Byte            1</p><pre><code>不能像Java一样自动转换要用toByte toShort toInt等方法表示Long，数值后面加l或L，123L表示Float，数值后面加f或F，123.3F目前Kotlin只支持十六进制和二进制十六进制用0x开头，0x1E二进制：数值用0b开头，0b10011下划线_分隔符把数值分开val oneMillion = 1_000_000</code></pre><p>5.字符类型<br>​<br>    Char表示<br>    如果c和97比较必须c.toInt之后才可以比较</p><p>6.布尔类型<br>​<br>    Boolean<br>7.数组<br>​<br>    arrayOf可以存储任何值的数组<br>    val arr = arrayOf(1,2,3,’a’,”adsa”,true)<br>    超过范围就会索引越界和Java一样</p><pre><code>arrayOfNulls直接定义一个长度为10的整型数组val arr1 = arrayOfNulls&lt;Int&gt;(10)没初始化默认为null，因为是对象使用Array类构造数组长度和初始化数据方法var arr3 = Array(10,{i -&gt; (i*i).toString()})intArrayOf、shortArrayOf等var arr4: IntArray = intArrayOf(10,20,30)</code></pre><p>8.字符串</p><pre><code>普通字符串和Java一样保留原始格式的字符串(raw string)var s1 = &quot;&quot;&quot;    hello            world    时间“”“字符串模版（占位符）val i = 10val s2 = &quot;i = $i&quot;</code></pre><p>9.包(Package)</p><pre><code>Java 包与目录有关Test.javapackage a.b;Kotlin 与当前目录无关他可以给包取别名import baidu.com.MyClass as my</code></pre><p>10.条件语句when<br>​<br>    类似Java的switch<br>    x = 1<br>    when(x){<br>        1-&gt;{<br>            println(“1—-“)<br>        }</p><pre><code>    2-&gt;{        println(&quot;2-----&quot;)    }    else{        println(&quot;其他&quot;)    }}    如果是对应的多个值var y = 1when(y){    1,2,3,4,5-&gt;{        println(&quot;以下符合条件&quot;)    }    10-&gt;{        println(&quot;以下不符合条件&quot;)    }    else{        println(&quot;其他&quot;)    }}when作为表达式使用var xyz = 1var m = when(xyz){    1-&gt;{        println(&quot;xyz==1&quot;)        20    }    2-&gt;{        println(&quot;xyz==2&quot;)        40    }    else{        100    }}使用in关键字var n = 20when(n){    in 1..15-&gt;print(&quot;满足条件&quot;)    in 16..20-&gt;println(“不满足条件”)    !in 100..200-&gt;println(&quot;hello world&quot;)    else-&gt;println(&quot;条件未知&quot;)}分支条件是一个函数fun double(x:Int):Int{    return x * x}var ok = 9when(ok){    double(2)-&gt;println(&quot;不满足条件&quot;)    double(3)-&gt;println(&quot;满足条件&quot;)    else-&gt;println(&quot;条件未知&quot;)}</code></pre><p>11.循环语句中的for<br>​<br>    var arr = intArrayOf(1,2,3,4,5)<br>    for(item: Int in arr){<br>        println(item)<br>    }    </p><pre><code>for(i in arr.indices){    println(&quot;arr[$i] = &quot; + arr[i])}for((index, value) in arr.withIndex()){    println(&quot;arr[$index] = &quot; + value)}</code></pre><p>12.循环语句while</p><pre><code>var i = 0while(i++ &lt; 10){    println(i)}do{    if(i==8){        continue    }    println(i)    if(i == 6){        break    }}while(--i &gt; 0)</code></pre>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;Kotlin基础知识&quot;&gt;&lt;a href=&quot;#Kotlin基础知识&quot; class=&quot;headerlink&quot; title=&quot;Kotlin基础知识&quot;&gt;&lt;/a&gt;Kotlin基础知识&lt;/h3&gt;&lt;p&gt;1.定义变量和常量&lt;br&gt;​&lt;br&gt;    变量var&lt;br&gt;    var
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>01_Kotlin类和接口</title>
    <link href="http://qdafengzi.github.io/2017/11/20/03.%E7%B1%BB%E5%92%8C%E6%8E%A5%E5%8F%A3/"/>
    <id>http://qdafengzi.github.io/2017/11/20/03.类和接口/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:32:10.964Z</updated>
    
    <content type="html"><![CDATA[<h2 id="类和接口"><a href="#类和接口" class="headerlink" title="类和接口"></a>类和接口</h2><p><strong>1.类的声明</strong></p><pre><code>class MyClass{}</code></pre><p><strong>2.构造器</strong><br>    主构造器<br>    声明的时候在类的后面(可以省略constructor)<br>    class Person constructor(name:String){<br>        //初始化<br>        init{<br>            println(name)<br>        }<br>    }</p><pre><code>fun main(args: Array&lt;String&gt;){    var person = Person(&quot;Tony&quot;)}次构造器class Product{    constructor(parent:Product){        println(parent)    }}class QACommunity(var url:String){    //主构造器的实现部分    init{        println(url)    }    //次构造器，可以有多个    //通过this直接调用了主构造器    constructor(value:Int):this(&quot;www.baidu.com&quot;)    println(value)    //通过调用其他次构造器间接调用了主构造器    constructor():this(20){        prontln(&quot;通过调用其他次构造器间接调用了主构造器&quot;)    }}注意：如果类定义类主构造器，次构造器必须直接或者间接的调用如果类未定义主构造器，次构造器不用调用</code></pre><ol><li><p>​</p><p>​<br>​<br>​<br>​<br>​<br>​<br>​</p></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;类和接口&quot;&gt;&lt;a href=&quot;#类和接口&quot; class=&quot;headerlink&quot; title=&quot;类和接口&quot;&gt;&lt;/a&gt;类和接口&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1.类的声明&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class MyClass{}
&lt;/code&gt;
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>01_Linux基础命令</title>
    <link href="http://qdafengzi.github.io/2017/11/20/Linux/"/>
    <id>http://qdafengzi.github.io/2017/11/20/Linux/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:33:06.811Z</updated>
    
    <content type="html"><![CDATA[<h1 id="基础命令"><a href="#基础命令" class="headerlink" title="基础命令"></a>基础命令</h1><h3 id="一、命令-最基础"><a href="#一、命令-最基础" class="headerlink" title="一、命令(最基础)"></a>一、命令(最基础)</h3><pre><code>1.进入图形界面：startX2.shutdown -h now 立刻进行关机3.shutdown -r now 现在重启  / reboot4.当前在那个目录pwd5.添加用户 useradd xiaoming6.设置密码 passwd xiaoming7.删除用户 userdel xiaoming 8.删除用户及用户主目录 userdel -r xiaoming</code></pre><h3 id="二、常用命令"><a href="#二、常用命令" class="headerlink" title="二、常用命令"></a>二、常用命令</h3><ul><li><p>级别：</p><p> 0.0用户级别：关机<br> ​    </p><pre><code>1.单用户模式2.多用户没有网络状态3.多用户网络状态(常用)4.系统未使用保留给用户5.图形化界面6.系统重启</code></pre></li><li><p>命令</p><p> ls -a显示隐藏文件<br> ​    </p><pre><code>ls -l显示长列表格式ls -alls -ld 文件夹 显示文件目录的信息，而不是文件下的文件列表ls -lh显示文件的详情，文件大小人性化显示mkdir 建立目录rmdir 删除目录grep &quot;关键词&quot; 文件名 查看文件中是否有此关键词find / -name 文件名字  从根目录查找文件ls -l &gt; a.txt列表的内容写入文件a.txt中(覆盖)ls -i文件目录i界面，一个文件的唯一标识ls -al &gt;&gt; aa.txt列表的内容追加到文件aa.txt的末尾groupadd policeman添加警察组useradd -g policeman xiaoming 把小明添加到policeman组里面chmod 777 tony 赋予tony权限logout 切换用户 cat 文件  查看文件vi  文件  不仅可以查看还可以修改</code></pre><p> ​    </p><pre><code>-rwxrw-r--     </code></pre><p> ​        </p><pre><code>    -(文件类型 -二进制文件d目录 l软链接文件)    rwx(文件所有者的权限)    rw-(与文件所有者同一组的用户权限)    r--(不与文件所有者同组的其他用户的权限)- 代表文件类型(-文件d目录l链接)，r可读用4表示，w可写用2表示，x可执行 用1表示</code></pre><p> ​    </p></li></ul><h3 id="三、命令"><a href="#三、命令" class="headerlink" title="三、命令"></a>三、命令</h3><pre><code>mkdir Japan 创建Japan目录mkdir -p Japan/xiaodingying  递归创建目录mkdir -p Japan/cangjing Japan/longze 递归创建多个目录cd 切换目录change directory pwd 显示当前目录 print working directorycd ..回到上一层目录rmdir 删除一个空目录remove empty directoriescp + 文件目录 + 要复制的文件目录cp -rp[源文件或目录][目标目录]cp -r 复制目录cp -p 保留文件属性Ctrl + l 清屏mv + 源文件或目录 + 目标目录  剪切处理rm + 源文件或目录 + 目标目录  删除处理rm -rf 删除一个目录 -r删除目录  -f强制执行Ctrl + c 终止操作touch +文件名 创建文件cat 文件名  查看文件内容cat -n 文件名 查看文件并带有行号tac 文件名 倒序显示内容more 文件名字 分页查看f 翻页Enter 换行q或者Q退出less 文件名字Enter 换行上箭头空格 翻页/关键词 搜索 按n进行查看所有的关键词(n代表next)head -n 7 显示文件的前7行  不加-n 默认是前十行tail 文件名 显示文件的后面几行    -n 指定行数    -f 动态显示文件末尾的内容ln -s + 原文件 + 目标文件 软链接lrwxrwxrwx l软链接，会显示文件指向</code></pre><h3 id="四、权限管理"><a href="#四、权限管理" class="headerlink" title="四、权限管理"></a>四、权限管理</h3><pre><code>chmod [{ugoa}{+-=}{rwx}][文件或目录]chmod [mode=421] [文件或目录]chmod -R 递归修改r --- 4w --- 2x --- 1rwxrw-r--7  6  4    </code></pre><p>File<br>​<br>    r:cat/more/head/tail/less<br>    w:vim<br>    x:script command</p><p>Directory<br>​<br>    r:ls<br>    w:touch/mkdir/rmdir/rm<br>    x:cd</p><pre><code>chown change file ownershipchown + 用户名 + 文件或目录改变一个文件的所有者chgrp change file groupchgrp 用户组 + 文件或目录umask [-S]以rwx形式显示新建文件缺省权限</code></pre><h3 id="五、搜索"><a href="#五、搜索" class="headerlink" title="五、搜索"></a>五、搜索</h3><pre><code>find [搜索范围][匹配条件]find + 目录 -name init 搜索目录文件夹中init的文件find + 目录 -name * init * 搜索目录文件夹中文件名包含init的文件find + 目录 -iname init 搜索目录文件夹中init的文件（不区分大小写）find + 目录 -size +204800  搜索目录文件夹中大于100M的文件find /ect -size +163840 -a -size -204800查找文件中大于80M小于100M的文件一个数据块 512字节 0.5kfind /home -user + 所属组  查看所属组下的文件find /etc -cmin -5查找5分钟内被修改过属性的文件和目录-amin 访问时间access-cmin 文件属性 change-mmin 文件内容 modify-type添加后可以指定查找的文件类型，f文件  d目录 l软链接文件-a 两个条件都满足-o 两个条件满足其一即可find /etc -name inittab -exec ls -l{}\;在/etc下查找inittab文件并显示其详细信息find /etc -inum 31551 -exec rm {}\;在目录下找到31551节点的文件并且删除locate + 文件名已有的文件(临时创建的查找不到，临时文件也会查找不到)updatedb升级文件资料库(升级之后临时文件还是查找不到)which + 命令的名字  查找命令的所在位置whereis + 命令的名字 查找命令的绝对位置grep + 关键词 + 文件所在的路径 查找关键词所在文件中的情况grep -i + 关键词 + 文件所在的路径 查找关键词所在文件中的情况（不区分大小写）grep -v ^# + 文件所在的路径 查找关键词所在文件中的情况(去掉注释内容的文件内容)</code></pre><p>​    </p><p>​<br>​    </p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h1 id=&quot;基础命令&quot;&gt;&lt;a href=&quot;#基础命令&quot; class=&quot;headerlink&quot; title=&quot;基础命令&quot;&gt;&lt;/a&gt;基础命令&lt;/h1&gt;&lt;h3 id=&quot;一、命令-最基础&quot;&gt;&lt;a href=&quot;#一、命令-最基础&quot; class=&quot;headerlink&quot; title=&quot;一
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Python基础教程</title>
    <link href="http://qdafengzi.github.io/2017/11/20/python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/"/>
    <id>http://qdafengzi.github.io/2017/11/20/python基础教程/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:33:36.554Z</updated>
    
    <content type="html"><![CDATA[<p><strong>1.安装测试</strong><br>​    </p><pre><code>安装略····检测：终端输入python退出Ctrl - D  或者 exit()python2 和 Python3的区别是前者不支持中文，后者支持和中文</code></pre><p><strong>2.字符编码</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">ASCII2551bytes</span><br><span class="line">1980 gb2312    7000多个字符</span><br><span class="line">1995GBK1.0    2w+</span><br><span class="line">2000GB1803027000多个</span><br><span class="line">Unicode2bytes</span><br><span class="line">utf-8 en:1byte,zh:3bytes</span><br></pre></td></tr></table></figure><p><strong>3.注释</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">单行注释#</span><br><span class="line">多行注释&apos;&apos;&apos;&apos;&apos;&apos;注释内容&apos;&apos;&apos;&apos;&apos;&apos;</span><br></pre></td></tr></table></figure><p><strong>4.输入输出</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">input </span><br><span class="line"></span><br><span class="line">print</span><br></pre></td></tr></table></figure><p><strong>5.密码输入时密文</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">引入：import getpass</span><br></pre></td></tr></table></figure><p><strong>6.缩进错误</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">IndentationError:</span><br></pre></td></tr></table></figure><p><strong>7.sys模块</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sys.path #环境变量</span><br><span class="line">sys.argv #相对路径</span><br></pre></td></tr></table></figure><p><strong>8.os模块</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cmd_res = os.system(&quot;dir&quot;)#执行命令不保存结果</span><br><span class="line">cmd_res = os.popen(&quot;dir&quot;).read()#执行命令保存结果并输出</span><br></pre></td></tr></table></figure><p><strong>9.bytes数据类型</strong></p><p>Python3中在网络中的数据传输都必须用二进制数据进行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&apos;￥20&apos;.encode(&apos;utf-8&apos;)</span><br><span class="line"></span><br><span class="line">b&apos;\xef\xbf\xa520&apos;.decode(&apos;utf-8&apos;)</span><br></pre></td></tr></table></figure><p><strong>10.列表</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">list = [&apos;a&apos;,&apos;b&apos;,&apos;c&apos;,&apos;d&apos;,&apos; e&apos;]</span><br><span class="line"></span><br><span class="line">print(list[1:3])# 取值 b c</span><br><span class="line">print(list[-1])#可以取负索引值</span><br><span class="line">print(list[:3])#取值相当于[0:3]</span><br><span class="line">print(list[-2:-1])#取值相当于[-2:-1]</span><br><span class="line"></span><br><span class="line">list.append(&apos;x&apos;)#拼接</span><br><span class="line">list.insert(1,&apos;y&apos;)#插入</span><br><span class="line">list.remove(&apos;b&apos;)#删除</span><br><span class="line">del list[1]#删除</span><br><span class="line">list.pop()#没有下标就默认删除最后一个</span><br><span class="line">list.index(&apos;a&apos;)#输出下标值 </span><br><span class="line">list.count(&apos;a&apos;)#输出a的个数</span><br><span class="line">list.reverse()#反转</span><br><span class="line">list.sort()#排序ASCII码的排序规则</span><br><span class="line">list2 = [&apos;n&apos;,&apos;m&apos;]</span><br><span class="line">list.extend(lists)#拼接list2</span><br></pre></td></tr></table></figure><p><strong>11.copy</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">copy.copy()#浅copy，如果一个列表中的某个元素是一个列表，修改这个列表的元素值，结果不是自己想要的</span><br><span class="line">copy.deepcopy()#深copy</span><br><span class="line"></span><br><span class="line">实现浅copy的方法</span><br><span class="line">person = [&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">p1 = copy.copy(person)</span><br><span class="line">p2 = person[:]</span><br><span class="line">p3 = list(person)</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">import copy</span><br><span class="line"></span><br><span class="line">names = [&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">names2 = copy.copy(names)</span><br><span class="line">print(names)</span><br><span class="line">print(names2)</span><br><span class="line"></span><br><span class="line">names[1] = &apos;x&apos;</span><br><span class="line">names[2][0] = &apos;Tony&apos;</span><br><span class="line"></span><br><span class="line">print(names)</span><br><span class="line">print(names2)</span><br><span class="line"></span><br><span class="line">#结果</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;x&apos;, [&apos;Tony&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;Tony&apos;, &apos;m&apos;], &apos;x&apos;]</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">import copy</span><br><span class="line"></span><br><span class="line">names = [&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">names2 = copy.deepcopy(names)</span><br><span class="line">print(names)</span><br><span class="line">print(names2)</span><br><span class="line"></span><br><span class="line">names[1] = &apos;x&apos;</span><br><span class="line">names[2][0] = &apos;Tony&apos;</span><br><span class="line"></span><br><span class="line">print(names)</span><br><span class="line">print(names2)</span><br><span class="line"></span><br><span class="line">#结果</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;x&apos;, [&apos;Tony&apos;, &apos;m&apos;], &apos;x&apos;]</span><br><span class="line">[&apos;a&apos;, &apos;b&apos;, [&apos;n&apos;, &apos;m&apos;], &apos;x&apos;]</span><br></pre></td></tr></table></figure><p><strong>12.元组</strong></p><p>又叫只读列表，和列表一样，就是只有count和index方法</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">names = (&apos;x&apos;,&apos;y&apos;,&apos;z&apos;)#用小括号表示</span><br></pre></td></tr></table></figure><p><strong>13.isdigit、enumerate</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Salary = input(&quot;input your salary:&quot;)</span><br><span class="line"></span><br><span class="line">If salary.isdigit():#判断是否是数字</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">names = (&apos;x&apos;,&apos;y&apos;,&apos;z&apos;)</span><br><span class="line"></span><br><span class="line">for index,item in enumerate(name):#enumerate()获取下标</span><br><span class="line">print(index,item)</span><br></pre></td></tr></table></figure><p><strong>14.字符串常用操作</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">strip去空格相关</span><br><span class="line">join数组的拼接</span><br><span class="line">maketrans可以做加密</span><br></pre></td></tr></table></figure><p><strong>15.集合</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">取交集intersection&amp;</span><br><span class="line">list1.intersection(list2)</span><br><span class="line">并集union|</span><br><span class="line">差集difference-</span><br><span class="line">子集issubset</span><br><span class="line">父集issuperset</span><br><span class="line">对称差集symmetric_difference^</span><br><span class="line">isdisjoint是否有交集</span><br><span class="line">pop删除</span><br><span class="line">remove删除不存在的会出错</span><br><span class="line">discard删除不存在的不会报错</span><br></pre></td></tr></table></figure><p><strong>16.文件的操作</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">open(&quot;文件&quot;).read();</span><br><span class="line">open(&quot;yest&quot;,&apos;r&apos;,encoding);&apos;r&apos;读&apos;w&apos;写&apos;a&apos;读和写append&apos;r+&apos;读写(不常用)&apos;w+&apos;读写(读和追加)</span><br><span class="line">&apos;rb&apos;、&apos;wb&apos;二进制的处理(不用写enconding否则报错)</span><br><span class="line">readlines()#读取一行，小文件</span><br><span class="line"></span><br><span class="line">f = open(&quot;yesterday&quot;,&apos;r&apos;, enconding = &apos;utf-8&apos;)</span><br><span class="line">f.tell()#光标的位置</span><br><span class="line">f.seek(0)#回到0</span><br><span class="line">f.enconding#编码</span><br><span class="line">f.seekable(self)#是否光标可移动</span><br><span class="line">f.truncate(20)#截断多少个字符</span><br></pre></td></tr></table></figure><p>进度条flush的运用</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">import sys, time</span><br><span class="line"></span><br><span class="line">for i in range(30):</span><br><span class="line">sys.stdout.write(&apos;#&apos;)</span><br><span class="line">sys.stdout.flush()</span><br><span class="line">time.sleep(0.2)</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">with open() ad f: 用with可以自动关闭</span><br></pre></td></tr></table></figure><p><strong>17.字符编码</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gbk——&gt;utf-8  要先转成unicode</span><br></pre></td></tr></table></figure><p><strong>18.函数</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">函数没有定义return任何数据的时候会返回None</span><br><span class="line"></span><br><span class="line">*args接收N个位置参数转换为元组</span><br><span class="line">**kwargs代表传递的参数是字典格式的，键值对，个数也是不固定</span><br><span class="line"></span><br><span class="line">在函数内修改全局变量要用global（字符串和数字）</span><br></pre></td></tr></table></figure><p><strong>19.装饰器(重点较难)</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">原则：</span><br><span class="line">不能修改被装饰的函数的源代码</span><br><span class="line">不能修改被装饰的函数的调用方式</span><br><span class="line">实现：</span><br><span class="line">函数即“变量”</span><br><span class="line">定义之后就才可以使用</span><br><span class="line">高阶函数</span><br><span class="line">把一个函数名当作实参传给另外一个函数</span><br><span class="line">返回值中包含函数名字</span><br><span class="line">嵌套函数</span><br></pre></td></tr></table></figure><p>20.列表生成式</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;strong&gt;1.安装测试&lt;/strong&gt;&lt;br&gt;​    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;安装略····

检测：终端输入python
退出Ctrl - D  或者 exit()

python2 和 Python3的区别是前者不支持中文，后者支持和中文
&lt;/code
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>安卓知识回顾</title>
    <link href="http://qdafengzi.github.io/2017/11/20/%E5%AE%89%E5%8D%93%E7%9F%A5%E8%AF%86%E5%9B%9E%E9%A1%BE/"/>
    <id>http://qdafengzi.github.io/2017/11/20/安卓知识回顾/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:32:30.517Z</updated>
    
    <content type="html"><![CDATA[<p><strong>1.获取版本信息</strong></p><pre><code>public static String getVersionName(Context context) {String versionName;// 获取包管理器PackageManager packageManager = context.getPackageManager();try {    PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);    versionName = packageInfo.versionName;} catch (NameNotFoundException e) {    versionName = &quot;获取版本信息错误&quot;;    e.printStackTrace();}return versionName;}</code></pre><p><strong>2.获取服务器版本信息</strong></p><pre><code>class GetServerVisionRunnable implements Runnable {        @Override        public void run() {            InputStream is = null;            BufferedReader br = null;            try {                // 创建连接                HttpURLConnection connection = (HttpURLConnection) new URL(                        &quot;http://192.168.129.102:8080/version.json&quot;).openConnection();                // 设置连接超时时间                connection.setConnectTimeout(5000);                // 设置读取超时时间                connection.setReadTimeout(5000);                // 连接                connection.connect();                String result = &quot;&quot;;                if (connection.getResponseCode() == 200) {                    is = connection.getInputStream();                    br = new BufferedReader(new InputStreamReader(is));                    String readlline;                    while ((readlline = br.readLine()) != null) {                        result += readlline;                    }                    JSONObject json = new JSONObject(result);                    int serverVersionCode = json.optInt(&quot;versioncode&quot;);                }            } catch (Exception e) {                e.printStackTrace();            } finally {                CommonUtils.CloseStream(is);                CommonUtils.CloseStream(br);            }        }    }</code></pre><p><strong>3.下载、安装apk</strong></p><pre><code>class DownloadRunnable implements Runnable {    private InputStream inputStream;    private FileOutputStream fos;    private ProgressDialog pd;    public DownloadRunnable(ProgressDialog pd) {        this.pd = pd;    }    @Override    public void run() {        try {            // 初始化            HttpURLConnection connection =                    (HttpURLConnection) new URL(downUrl).openConnection();            connection.setConnectTimeout(5000);            connection.setReadTimeout(5000);            connection.connect();            // 连接成功            if (connection.getResponseCode() == 200) {                // 创建文件                File file = new File(Environment.getExternalStorageDirectory(), &quot;test.apk&quot;);                inputStream = connection.getInputStream();                // 获取文件总长度                int totalLength = connection.getContentLength();                // 设置进度条的总大小                pd.setMax(totalLength);                fos = new FileOutputStream(file);                int len;                byte[] buffer = new byte[1024];                int current = 0;                while ((len = inputStream.read(buffer)) != -1) {                    fos.write(buffer, 0, len);                    current += len;                    // 设置进度条的进度                    pd.setProgress(current);                }                // 隐藏进度条                pd.dismiss();                // 安装应用                Intent intent = new Intent();                intent.setAction(&quot;android.intent.action.VIEW&quot;);                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                intent.addCategory(&quot;android.intent.category.DEFAULT&quot;);                              intent.setDataAndType(Uri.parse(&quot;file:&quot; + file.getAbsolutePath()),                        &quot;application/vnd.android.package-archive&quot;);                startActivityForResult(intent, REQ_CODE_INSTALL_APP);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            CommonUtils.CloseStream(inputStream);            CommonUtils.CloseStream(fos);        }    }}</code></pre><p><strong>4.动画</strong></p><pre><code>//沿Y轴旋转的属性动画ObjectAnimator animator = ObjectAnimator.ofFloat(iv_icon, &quot;rotationY&quot;, 0, 45, 90, 135, 180, 225, 270, 315, 360);// 时常animator.setDuration(2000);// 重复次数animator.setRepeatCount(ObjectAnimator.INFINITE);// 重复模式animator.setRepeatMode(ObjectAnimator.REVERSE);animator.start();</code></pre><p><strong>5.按钮按压效果选择器</strong></p><ul><li><p>在res/drawable/目录下新建一个正常状态下的shape</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;</span><br><span class="line">    android:shape=&quot;oval&quot; &gt;</span><br><span class="line">    &lt;!-- oval: 椭圆 --&gt;</span><br><span class="line">    &lt;!-- 半径 --&gt;</span><br><span class="line">    &lt;corners android:radius=&quot;16dp&quot; /&gt;</span><br><span class="line">    &lt;!-- 宽高 --&gt;</span><br><span class="line">    &lt;size</span><br><span class="line">        android:height=&quot;32dp&quot;</span><br><span class="line">        android:width=&quot;32dp&quot; /&gt;</span><br><span class="line">    &lt;!-- 背景色 --&gt;</span><br><span class="line">    &lt;solid android:color=&quot;#99ffffff&quot; /&gt;</span><br><span class="line">&lt;/shape&gt;</span><br></pre></td></tr></table></figure></li><li><p>在res/drawable/目录下新建一个按压状态下的shape</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;</span><br><span class="line">    android:shape=&quot;oval&quot; &gt;</span><br><span class="line">    &lt;!-- 半径 --&gt;</span><br><span class="line">    &lt;corners android:radius=&quot;16dp&quot; /&gt;</span><br><span class="line">    &lt;!-- 宽高 --&gt;</span><br><span class="line">    &lt;size</span><br><span class="line">        android:height=&quot;32dp&quot;</span><br><span class="line">        android:width=&quot;32dp&quot; /&gt;</span><br><span class="line">    &lt;!-- 背景色 --&gt;</span><br><span class="line">    &lt;solid android:color=&quot;#33ffffff&quot; /&gt;</span><br><span class="line">&lt;/shape&gt;</span><br></pre></td></tr></table></figure></li><li><p>在res/drawable/目录下新建一个selector</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:enterFadeDuration=&quot;300&quot; android:exitFadeDuration=&quot;300&quot;&gt;</span><br><span class="line">    &lt;!-- 按压状态使用的背景图 --&gt;</span><br><span class="line">    &lt;item android:drawable=&quot;@drawable/setting_pressed&quot; android:state_pressed=&quot;true&quot;/&gt;</span><br><span class="line">    &lt;!-- 默认状态使用的背景图 --&gt;</span><br><span class="line">    &lt;item android:drawable=&quot;@drawable/setting_normal&quot;/&gt;</span><br><span class="line">    &lt;!-- 代码执行的时候会从上向下匹配背景图,一旦有一行执行了,下面的就不会再执行.所以一定要将按压状态的背景图放在默认状态的背景图上方,否则背景图永远都是默认状态的 --&gt;</span><br><span class="line">&lt;/selector&gt;</span><br></pre></td></tr></table></figure></li><li><p>为setting按钮设置 android:background属性,值为新建的selector</p></li></ul><p><strong>6.自定义属性</strong></p><ul><li><p>声明自定义属性，参考sdk/platforms/res/values/attrs</p><p>  <declare-styleable name="SettingItemView">   </declare-styleable></p><pre><code>   &lt;attr name=&quot;sivText&quot; format=&quot;reference|string&quot; /&gt;&lt;/declare-styleable&gt;</code></pre></li><li><p>布局文件使用自定义属性</p><p>  添加命名空间</p><pre><code>xmlns:baidu=&quot;http://schemas.android.com/apk/res/com.baidu.demo&quot;使用&lt;com.baidu.demo.view.SettingItemView     android:layout_width=&quot;match_parent&quot;    baidu:siv_text=&quot;设置1&quot;    android:layout_height=&quot;wrap_content&quot;/&gt;</code></pre></li><li><p>接收属性值</p><p>  TypedArray ta = context.obtainStyledAttributes(set, R.styleable.SettingItemView);</p><pre><code>//获取属性值String sivText = ta.getString(R.styleable.SettingItemView_siv_text);//赋值mTvSettingItem = (TextView) findViewById(R.id.tv_setting_item);mTvSettingItem.setText(sivText);</code></pre></li></ul><p><strong>7.自定义其他属性</strong></p><ul><li><p>设置item背景的自定义属性：枚举类型，参考TextView ellipsize属性</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;attr name=&quot;sivBackground&quot;&gt;</span><br><span class="line">    &lt;enum name=&quot;start&quot; value=&quot;0&quot; /&gt;</span><br><span class="line">    &lt;enum name=&quot;middle&quot; value=&quot;1&quot; /&gt;</span><br><span class="line">    &lt;enum name=&quot;end&quot; value=&quot;2&quot; /&gt;</span><br><span class="line"> &lt;/attr&gt;</span><br></pre></td></tr></table></figure></li></ul><ul><li><p>获取枚举类型属性：参考TextView源码读取ellipsize属性，a.getInt()</p>   <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int sivBackground = ta.getInt(R.styleable.SettingItemView_sivBackground,SETTING_ITEM_BACKGROUND_START);</span><br></pre></td></tr></table></figure></li><li><p>自定义控件什么常量，对应枚举的value值</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">private final static int SETTING_ITEM_BACKGROUND_START = 0;</span><br><span class="line">private final static int SETTING_ITEM_BACKGROUND_MIDDLE = 1;</span><br><span class="line">private final static int SETTING_ITEM_BACKGROUND_END = 2;</span><br></pre></td></tr></table></figure></li><li><p>赋值</p><p>  switch (sivBackground) {</p><pre><code>case SETTING_ITEM_BACKGROUND_START:    mRlItemView.setBackgroundResource(R.drawable.setting_item_first_selector);    break;case SETTING_ITEM_BACKGROUND_MIDDLE:    mRlItemView.setBackgroundResource(R.drawable.setting_item_middle_selector);    break;case SETTING_ITEM_BACKGROUND_END:    mRlItemView.setBackgroundResource(R.drawable.setting_item_last_selector);    break;}</code></pre></li></ul><p><strong>8.自定义Dialog</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">AlertDialog.Builder builder = new AlertDialog.Builder(this);</span><br><span class="line">//填充自定义布局</span><br><span class="line">   View view = View.inflate(this, R.layout.activity_setting_setting_pwd, null);</span><br><span class="line"></span><br><span class="line">   final EditText etPwd = (EditText) view.findViewById(R.id.et_pwd);</span><br><span class="line"></span><br><span class="line">   final EditText etComfirmPwd = (EditText) view.findViewById(R.id.et_comfirm_pwd);</span><br><span class="line"></span><br><span class="line">   Button btnOk = (Button) view.findViewById(R.id.btn_ok);</span><br><span class="line"></span><br><span class="line">   Button btnCancel = (Button) view.findViewById(R.id.btn_cancel);</span><br><span class="line"> </span><br><span class="line">   builder.setView(view);</span><br><span class="line"></span><br><span class="line">   final AlertDialog dialog = builder.show();</span><br></pre></td></tr></table></figure><p><strong>9.Activity界面间的跳转动画（需要在基类中设置Activity进出的动画）</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line">设置Activity跳转：公共style中添加onClick方法（clickNext、clickPre）,对应Activity实现方法</span><br><span class="line">在res文件夹下建立anim文件夹，再建立XML文件如下：next_step_enter.xml、next_step_exit.xml</span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;translate xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;</span><br><span class="line">           android:duration=&quot;200&quot;</span><br><span class="line">           android:fromXDelta=&quot;100%p&quot;</span><br><span class="line">           android:toXDelta=&quot;0&quot;/&gt;</span><br><span class="line"></span><br><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;translate xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;</span><br><span class="line">           android:duration=&quot;200&quot;</span><br><span class="line">           android:fromXDelta=&quot;-100%p&quot;</span><br><span class="line">           android:toXDelta=&quot;0&quot;/&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&lt;!-- 下一步 --&gt;</span><br><span class="line">&lt;style name=&quot;btnNextStep&quot; parent=&quot;@style/btnOkNarmal&quot;&gt;</span><br><span class="line">  &lt;item name=&quot;android:drawableRight&quot;&gt;@drawable/next&lt;/item&gt;</span><br><span class="line">  &lt;item name=&quot;android:onClick&quot;&gt;clickNextStep&lt;/item&gt;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 上一步 --&gt;</span><br><span class="line">&lt;style name=&quot;btnPreStep&quot; parent=&quot;@style/btnOkNarmal&quot;&gt;</span><br><span class="line">  &lt;item name=&quot;android:drawableRight&quot;&gt;@drawable/pre&lt;/item&gt;</span><br><span class="line">  &lt;item name=&quot;android:onClick&quot;&gt;clickPreStep&lt;/item&gt;</span><br><span class="line">&lt;/style&gt;</span><br><span class="line">       </span><br><span class="line">//点击事件的触发  </span><br><span class="line"> public void clickNextStep(View v)&#123;</span><br><span class="line">    Intent intent = new Intent(this, MainActivity.class);</span><br><span class="line">    startActivity(intent);</span><br><span class="line">    overridePendingTransition(R.anim.next_enter_anim, R.anim.next_exit_anim);</span><br><span class="line">    finish();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">public void clickPreStep(View v) &#123;</span><br><span class="line">    Intent intent = new Intent(this, MainActivity2.class);</span><br><span class="line">    startActivity(intent);</span><br><span class="line">    overridePendingTransition(R.anim.pre_enter_anim, R.anim.pre_exit_anim);</span><br><span class="line">    finish();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>10.手势识别器滑动效果的实现</strong></p><pre><code>    //手势识别器GestureDetector mDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){        /**手势滑动e1：起点、e2：终点、velocityX：X轴速率、velocityY：Y轴速率*/        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {            float x1 = e1.getRawX();            float x2 = e2.getRawX();            float y1 = e1.getRawY();            float y2 = e2.getRawY();            //速率判断            if(Math.abs(velocityX) &lt; 200){                Log.d(TAG, &quot;速率低&quot;);                return true;            }            //垂直方向判断            if(Math.abs(y2-y1) &gt; Math.abs(x2-x1)){                Log.d(TAG, &quot;垂直方向&quot;);                return true;            }            if(x1 &gt; x2){//向左滑动：下一步，x1&gt;x2                doNext();                LogUtils.d(&quot;下一步&quot;);            }else{//向右滑动：上一步，x1&lt;x2                doPre();                LogUtils.d(&quot;上一步&quot;);            }            Log.d(TAG, &quot;x2-x1=&quot;+(x2-x1));                        return super.onFling(e1, e2, velocityX, velocityY);        }    });    @Override    public boolean onTouchEvent(MotionEvent event) {        //必须调用手势监听        mDetector.onTouchEvent(event);        return super.onTouchEvent(event);    }</code></pre><p><strong>11.获取手机sim卡信息</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">//获取sim卡信息</span><br><span class="line">private String getSim()&#123;</span><br><span class="line">TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);</span><br><span class="line">manager.getLine1Number();//手机号，运营商出厂sim卡，有时候把手机号烧到sim卡上，有时候不烧，不一定，可能为空</span><br><span class="line">return manager.getSimSerialNumber();//不为空，唯一</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//权限6.0以上要动态申请权限</span><br><span class="line">&lt;uses-permission android:name=&quot;android.permission.READ_PHONE_STATE&quot;/&gt;</span><br></pre></td></tr></table></figure><p><strong>12.手机联系人</strong></p><ul><li><p>内容解析者：ContentResolver</p></li><li><p>需求：一个联系人可能有多个号码，比如有2个，就有2个item，对应2个联系人</p></li><li><p>Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI</p></li><li><p>名称：ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME</p></li><li><p>号码：ContactsContract.CommonDataKinds.Phone.NUMBER</p></li><li><p>联系人id：ContactsContract.CommonDataKinds.Phone.CONTACT_ID</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">ContentResolver resolver = context.getContentResolver();</span><br><span class="line">Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;</span><br><span class="line">String[] projection = new String[]&#123;ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,</span><br><span class="line">ContactsContract.CommonDataKinds.Phone.NUMBER, </span><br><span class="line">ContactsContract.CommonDataKinds.Phone.CONTACT_ID&#125;; //查询内容</span><br><span class="line">String selection = null; //查询条件</span><br><span class="line">String[] selectionArgs = null;//查询条件对应参数</span><br><span class="line">String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+&quot; desc&quot;; //排序</span><br><span class="line">Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, sortOrder);</span><br><span class="line">if(cursor != null)&#123;</span><br><span class="line">while(cursor.moveToNext())&#123;</span><br><span class="line">Contact contact = new Contact();</span><br><span class="line">contact.name = cursor.getString(0);</span><br><span class="line">contact.number = cursor.getString(1);</span><br><span class="line">contact.id = cursor.getLong(2);</span><br><span class="line">list.add(contact);</span><br><span class="line">&#125;</span><br><span class="line">cursor.close();</span><br><span class="line">&#125;</span><br><span class="line">return list;</span><br></pre></td></tr></table></figure><p>​      </p></li><li><p>通过id获取联系人头像</p></li><li><p>单独封装一个方法，通过id获取头像bitmap</p></li><li><p>ContactsContract：联系人协议</p></li><li><p>content://contacts 所有联系人uri，content://contacts/id 指定联系人id的uri ContentResolver cr = context.getContentResolver();</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">// content://contacts/id 对应id联系人uri</span><br><span class="line">Uri contactUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, </span><br><span class="line">String.valueOf(contactId));</span><br><span class="line">InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream(cr, contactUri );</span><br><span class="line">return BitmapFactory.decodeStream(stream);</span><br></pre></td></tr></table></figure></li></ul><p><strong>13.监控手机卡的变化</strong></p><ul><li><p>创建广播接收者监听sim卡变化</p></li><li><p>清单文件注册上述广播</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;receiver android:name=&quot;com.baidu.BootCompleteReceive&quot; &gt;</span><br><span class="line">&lt;intent-filter android:priority=&quot;1000&quot; &gt;</span><br><span class="line">        &lt;!-- 手机重启 --&gt;</span><br><span class="line">        &lt;action android:name=&quot;android.intent.action.BOOT_COMPLETED&quot; /&gt;</span><br><span class="line">    &lt;/intent-filter&gt;</span><br><span class="line">&lt;/receiver&gt;</span><br></pre></td></tr></table></figure></li><li><p>添加权限：android.permission.RECEIVE_BOOT_COMPLETED</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">class BootCompleteReceive extends BroadcastReceiver&#123;······</span><br><span class="line">@Override</span><br><span class="line">public void onReceive(Context context, Intent intent) &#123;</span><br><span class="line">LogUtils.d(&quot;手机重启...&quot;);</span><br><span class="line">String newSim = PhoneUtils.getSimSerialNumber(context) + &quot;123&quot;;</span><br><span class="line">String sim = SharePreferenceUtils.getString(context, SharePreferenceUtils.KEY_BIND_SIM);</span><br><span class="line"></span><br><span class="line">if(newSim.equals(sim))&#123;</span><br><span class="line">LogUtils.d(&quot;手机sim卡没变...&quot;);</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">boolean protecting = SharePreferenceUtils.getBoolean(context, SharePreferenceUtils.KEY_SAFE_PROTECTED, false);</span><br><span class="line">if(!protecting)&#123;</span><br><span class="line">return;</span><br><span class="line">&#125;</span><br><span class="line">LogUtils.d(&quot;手机丢失了，sim卡变了...&quot;);</span><br><span class="line">//安全号码</span><br><span class="line">String number = SharePreferenceUtils.getString(context, SharePreferenceUtils.KEY_SAFE_NUMBER);</span><br><span class="line">//发送报警短信</span><br><span class="line">SmsManager manager = SmsManager.getDefault();</span><br><span class="line">//需要添加发送短信权限</span><br><span class="line">manager.sendTextMessage(number, null, &quot;手机已丢失！&quot;, null, null);</span><br><span class="line">LogUtils.d(&quot;发送报警短信...&quot;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ul><p><strong>14.屏蔽短信</strong></p><ul><li><p>创建新广播接收者</p></li><li><p>清单文件注册上述广播，权限android.provider.Telephony.SMS_RECEIVED</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;receiver android:name=&quot;.receiver.SmsBroadcastReceiver&quot;&gt;</span><br><span class="line">&lt;!-- 接收短信 --&gt;</span><br><span class="line">     &lt;intent-filter android:priority=&quot;1000&quot;&gt;</span><br><span class="line">         &lt;action android:name=&quot;android.provider.Telephony.SMS_RECEIVED&quot;/&gt;</span><br><span class="line">     &lt;/intent-filter&gt;</span><br><span class="line"> &lt;/receiver&gt;</span><br></pre></td></tr></table></figure></li><li><p>注意：上述action在高版本被谷歌隐藏，真实情况该api还可以使用，为了使用可先降低版本，添加action在还原高版本</p></li><li><p>onReceive接收短信</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">class SmsBroadcastReceiver extends BroadcastReceiver&#123;·······</span><br><span class="line"></span><br><span class="line">Object[] objs = intent.getExtras.get(&quot;pdus&quot;);</span><br><span class="line">for(Object obj : objs)&#123;</span><br><span class="line">SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj);</span><br><span class="line">//String sender = sms.getOriginatingAddress();//发送者</span><br><span class="line">String content = sms.getMessageBody();//短信内容</span><br><span class="line">    //判断内容</span><br><span class="line">    if(&quot;广告短信&quot;.equals(content))&#123;</span><br><span class="line">          abortBroadcast();//屏蔽，不让用户看到该条短信</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ul><p><strong>15.手机播放音乐</strong></p><ul><li><p>存放本地的res/raw目录下</p></li><li><p>代码：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">MediaPlayer player = MediaPlayer.create(context, R.raw.music);</span><br><span class="line">player.setLooping(true);//无限播放</span><br><span class="line">player.setVolume(1f, 1f);//设置最大声音</span><br><span class="line">player.start();//开始播放</span><br></pre></td></tr></table></figure></li></ul><p><strong>16.手机定位</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1.getSystemService获取LocationManager</span><br><span class="line">2.manager请求位置requestLocationUpdates</span><br><span class="line">3.监听定位回调onLocationChanged</span><br><span class="line">4.退出取消定位：mLocManager.removeUpdates(mListener);</span><br><span class="line">5.添加GPS定位权限android.permission.ACCESS_FINE_LOCATION</span><br></pre></td></tr></table></figure><p><strong>17.火星座标系转真是座标</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">//火星坐标系转成正式数据：收费</span><br><span class="line">//开源工具:不能使用在商业项目，违法</span><br><span class="line">try &#123;</span><br><span class="line">    InputStream is = getAssets().open(&quot;axisoffset.dat&quot;);</span><br><span class="line">    ModifyOffset modifyOffset = ModifyOffset.getInstance(is);</span><br><span class="line"></span><br><span class="line">    PointDouble pt = new PointDouble(longitude, latitude);//火星坐标对象</span><br><span class="line"></span><br><span class="line">    PointDouble result = modifyOffset.s2c(pt);//真实坐标系，防盗谷歌地图，确认是否显示真实位置</span><br><span class="line">    Log.d(TAG, result.toString());</span><br><span class="line"></span><br><span class="line">&#125; catch (IOException e) &#123;</span><br><span class="line">// TODO Auto-generated catch block</span><br><span class="line">e.printStackTrace();</span><br><span class="line">&#125; catch (Exception e) &#123;</span><br><span class="line">e.printStackTrace();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>18.设备管理员</strong>(源码DeviceAdminReceiver )</p><p>使用的一般步骤</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1.新建广播接受者：继承DeviceAdminReceiver</span><br><span class="line">2.清单文件：注册设备管理员，和BroadcastReceiver一样，参考上面打开的文档</span><br><span class="line">3.设备管理员权限申请：通过一个xml文件申请（保存在res/xml目录下），具体参考文档</span><br><span class="line">4.使用api：DevicePolicyManager，manager.lockNow()锁屏，activity.finish();</span><br><span class="line">5.用户激活设备管理员：设置-安全-设备管理器-激活应用</span><br></pre></td></tr></table></figure><p>避免手机防盗的代码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">DevicePolicyManager mDevPolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);</span><br><span class="line">ComponentName mDeviceAdminSample = new ComponentName(this, ScreenLockReceiver.class);</span><br><span class="line">boolean iaActive = mDevPolicyManager.isAdminActive(mDeviceAdminSample);</span><br><span class="line">if(!iaActive)&#123;//没有激活过，激活</span><br><span class="line">//开启</span><br><span class="line">    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);</span><br><span class="line">intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);</span><br><span class="line">       intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,</span><br><span class="line">               getString(R.string.add_admin_extra_app_text));</span><br><span class="line">       startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);</span><br><span class="line"></span><br><span class="line">&#125;else&#123;</span><br><span class="line">lock(mDevPolicyManager);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">private void lock(DevicePolicyManager mDevPolicyManager) &#123;</span><br><span class="line">mDevPolicyManager.lockNow();</span><br><span class="line">finish();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@Override</span><br><span class="line">protected void onActivityResult(int requestCode, int resultCode, Intent data) &#123;</span><br><span class="line">super.onActivityResult(requestCode, resultCode, data);</span><br><span class="line">if(requestCode == REQUEST_CODE_ENABLE_ADMIN &amp;&amp; resultCode == Activity.RESULT_OK)&#123;</span><br><span class="line">lock(mDevPolicyManager);</span><br><span class="line">&#125;else&#123;</span><br><span class="line">finish();</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;strong&gt;1.获取版本信息&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public static String getVersionName(Context context) {
String versionName;
// 获取包管理器
PackageMana
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>微信小程序</title>
    <link href="http://qdafengzi.github.io/2017/11/20/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/"/>
    <id>http://qdafengzi.github.io/2017/11/20/微信小程序/</id>
    <published>2017-11-20T14:32:53.000Z</published>
    <updated>2017-11-20T16:30:32.072Z</updated>
    
    <content type="html"><![CDATA[<p><strong>1.分辨率问题</strong><br>​    </p><pre><code>以iP6的物理像素750*1334为设计稿进行设计iPhone6下1px = 1rpxiPhone6 plus 下 1px = 0.6rpx</code></pre><p><strong>2.页面之间的跳转</strong><br>​<br>    //会跳转并且可以返回父页面，会执行onHide生命周期<br>    wx.navigateTo({<br>        url:”../posts/post”<br>    });</p><pre><code>//跳转后不可以返回父页面，会执行onUnLoad生命周期wx.redirectTo({    url:&quot;../posts/post&quot;})</code></pre><p><strong>3.点击事件</strong><br>​<br>    //点击子节点，子父节点都会相应事件<br>    <view class="moto-container" bindtap="onTap"><br>    <text class="moto" bindtap="onSubTap">开启撸猫之旅</text><br>    </view><br>    //点击子节点，只有子节点会有相应<br>    <view class="moto-container" bindtap="onTap"><br>    <text class="moto" catchtap="onSubTap">开启撸猫之旅</text><br>    </view></p><p><strong>4..js文件data文件执行该过程</strong><br>​<br>        小程序总是会读取data对象来做数据绑定，是在onLoad事件执行之后发生的。</p><p><strong>5.缓存的处理(不能超过10M)</strong><br>​<br>    wx.setStorageSync(“key”,”value”)</p><pre><code>wx.getStorageSync(&quot;key&quot;)wx.removeStorageSync(&quot;key&quot;)wx.clearStorageSync();</code></pre><p>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​<br>​    </p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;strong&gt;1.分辨率问题&lt;/strong&gt;&lt;br&gt;​    &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;以iP6的物理像素750*1334为设计稿进行设计
iPhone6下1px = 1rpx
iPhone6 plus 下 1px = 0.6rpx
&lt;/code&gt;&lt;/pre&gt;&lt;p
      
    
    </summary>
    
    
  </entry>
  
</feed>
