-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
674 lines (421 loc) · 135 KB
/
index.html
File metadata and controls
674 lines (421 loc) · 135 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Reacoder</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description">
<meta property="og:type" content="website">
<meta property="og:title" content="Reacoder">
<meta property="og:url" content="http://reacoder.github.io/">
<meta property="og:site_name" content="Reacoder">
<meta property="og:description">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Reacoder">
<meta name="twitter:description">
<link rel="alternative" href="/atom.xml" title="Reacoder" type="application/atom+xml">
<link rel="icon" href="/favicon.png">
<link rel="stylesheet" href="/css/style.css" type="text/css">
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
</head>
<body>
<div id="container">
<div class="left-col">
<div class="overlay"></div>
<div class="intrude-less">
<header id="header" class="inner">
<div class="profilepic">
<img src="http://tp2.sinaimg.cn/1918409225/180/40039469631/1">
</div>
<hgroup>
<h1 class="header-author"><a href="/">Reacoder</a></h1>
</hgroup>
<div class="switch-btn">
<div class="icon">
<div class="icon-ctn">
<div class="icon-wrap icon-house" data-idx="0">
<div class="birdhouse"></div>
<div class="birdhouse_holes"></div>
</div>
<div class="icon-wrap icon-ribbon hide" data-idx="1">
<div class="ribbon"></div>
</div>
</div>
</div>
<div class="tips-box hide">
<div class="tips-arrow"></div>
<ul class="tips-inner">
<li>菜单</li>
<li>标签</li>
</ul>
</div>
</div>
<div class="switch-area">
<div class="switch-wrap">
<section class="switch-part switch-part1">
<nav class="header-menu">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">所有文章</a></li>
<li><a href="/categories/Android/">Android</a></li>
<li><a href="/2014/12/01/about/">关于我</a></li>
</ul>
</nav>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="https://github.com/Reacoder" title="github">github</a>
<a class="weibo" target="_blank" href="http://weibo.com/u/1918409225" title="weibo">weibo</a>
<a class="google" target="_blank" href="https://plus.google.com/u/0/117706805140071058584/posts" title="google">google</a>
</div>
</nav>
</section>
<section class="switch-part switch-part2">
<div class="widget tagcloud">
<a href="/tags/Studio/" style="font-size: 10.00px;">Studio</a><a href="/tags/adb/" style="font-size: 10.00px;">adb</a><a href="/tags/animation/" style="font-size: 10.00px;">animation</a><a href="/tags/blog/" style="font-size: 10.00px;">blog</a><a href="/tags/canvas/" style="font-size: 10.00px;">canvas</a><a href="/tags/cmd/" style="font-size: 10.00px;">cmd</a><a href="/tags/customView/" style="font-size: 20.00px;">customView</a><a href="/tags/db/" style="font-size: 10.00px;">db</a><a href="/tags/drawer/" style="font-size: 10.00px;">drawer</a><a href="/tags/git/" style="font-size: 10.00px;">git</a><a href="/tags/gradle/" style="font-size: 10.00px;">gradle</a><a href="/tags/hexo/" style="font-size: 15.00px;">hexo</a><a href="/tags/image/" style="font-size: 10.00px;">image</a><a href="/tags/js/" style="font-size: 10.00px;">js</a><a href="/tags/listview/" style="font-size: 15.00px;">listview</a><a href="/tags/menu/" style="font-size: 10.00px;">menu</a><a href="/tags/nodejs/" style="font-size: 10.00px;">nodejs</a><a href="/tags/note/" style="font-size: 10.00px;">note</a><a href="/tags/spannableString/" style="font-size: 10.00px;">spannableString</a><a href="/tags/sql/" style="font-size: 10.00px;">sql</a><a href="/tags/textView/" style="font-size: 10.00px;">textView</a><a href="/tags/timeHelper/" style="font-size: 10.00px;">timeHelper</a><a href="/tags/toolBar/" style="font-size: 10.00px;">toolBar</a><a href="/tags/toolbar/" style="font-size: 15.00px;">toolbar</a><a href="/tags/touchEvent/" style="font-size: 15.00px;">touchEvent</a><a href="/tags/tutorial/" style="font-size: 10.00px;">tutorial</a><a href="/tags/video/" style="font-size: 10.00px;">video</a><a href="/tags/webView/" style="font-size: 10.00px;">webView</a>
</div>
</section>
</div>
</div>
</header>
</div>
</div>
<div class="mid-col">
<nav id="mobile-nav">
<div class="overlay"></div>
<div class="intrude-less">
<header id="header" class="inner">
<div class="profilepic">
<img src="http://tp2.sinaimg.cn/1918409225/180/40039469631/1">
</div>
<hgroup>
<h1 class="header-author"><a href="/">Reacoder</a></h1>
</hgroup>
<nav class="header-menu">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">所有文章</a></li>
<li><a href="/categories/Android/">Android</a></li>
<li><a href="/2014/12/01/about/">关于我</a></li>
<div class="clearfix"></div>
</ul>
</nav>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="https://github.com/Reacoder" title="github">github</a>
<a class="weibo" target="_blank" href="http://weibo.com/u/1918409225" title="weibo">weibo</a>
<a class="google" target="_blank" href="https://plus.google.com/u/0/117706805140071058584/posts" title="google">google</a>
</div>
</nav>
</header>
</div>
</nav>
<article id="post-get-form-data-from-webview" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/02/11/get-form-data-from-webview/" class="article-date">
<time datetime="2015-02-11T09:40:21.000Z" itemprop="datePublished">Feb 11 2015</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/js/">js</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/webView/">webView</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/02/11/get-form-data-from-webview/">如何从webview 中获取表单数据</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="1-_先分析html_表单">1. 先分析html 表单</h3>
<figure class="highlight html"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><span class="tag"><<span class="title">form</span> <span class="attribute">method</span>=<span class="value">"POST"</span> <span class="attribute">id</span>=<span class="value">"login-form"</span> <span class="attribute">class</span>=<span class="value">"adjacent"</span> <span class="attribute">action</span>=<span class="value">"/accounts/login/?force_classic_login=&next=/oauth/authorize/%3Fclient_id%3Dcf2cd88a0b7745a4b4f8ac673190f659%26redirect_uri%3Dhttp%253A%252F%252Finstafollow.elasticbeanstalk.com%252Fredirect.php%253FclientKey%253Dcf2cd88%26response_type%3Dcode"</span>></span></div><div class="line"> <span class="tag"><<span class="title">input</span> <span class="attribute">type</span>=<span class="value">"hidden"</span> <span class="attribute">name</span>=<span class="value">"csrfmiddlewaretoken"</span> <span class="attribute">value</span>=<span class="value">"fd942039c72570e71786a8a5a13566b5"</span>/></span></div><div class="line"> <span class="tag"><<span class="title">p</span>></span><span class="tag"><<span class="title">label</span> <span class="attribute">for</span>=<span class="value">"id_username"</span>></span>��ㄦ�峰��:<span class="tag"></<span class="title">label</span>></span> <span class="tag"><<span class="title">input</span> <span class="attribute">name</span>=<span class="value">"username"</span> <span class="attribute">maxlength</span>=<span class="value">"30"</span> <span class="attribute">autocapitalize</span>=<span class="value">"off"</span> <span class="attribute">autocorrect</span>=<span class="value">"off"</span> <span class="attribute">type</span>=<span class="value">"text"</span> <span class="attribute">id</span>=<span class="value">"id_username"</span> /></span><span class="tag"></<span class="title">p</span>></span></div><div class="line"><span class="tag"><<span class="title">p</span>></span><span class="tag"><<span class="title">label</span> <span class="attribute">for</span>=<span class="value">"id_password"</span>></span>瀵����:<span class="tag"></<span class="title">label</span>></span> <span class="tag"><<span class="title">input</span> <span class="attribute">autocapitalize</span>=<span class="value">"off"</span> <span class="attribute">autocorrect</span>=<span class="value">"off"</span> <span class="attribute">type</span>=<span class="value">"password"</span> <span class="attribute">name</span>=<span class="value">"password"</span> <span class="attribute">id</span>=<span class="value">"id_password"</span> /></span><span class="tag"></<span class="title">p</span>></span></div><div class="line"> <span class="tag"><<span class="title">p</span> <span class="attribute">class</span>=<span class="value">"form-actions"</span>></span></div><div class="line"> <span class="tag"><<span class="title">a</span> <span class="attribute">href</span>=<span class="value">"/accounts/password/reset/"</span>></span>蹇�璁板�����锛�<span class="tag"></<span class="title">a</span>></span></div><div class="line"> <span class="tag"><<span class="title">input</span> <span class="attribute">type</span>=<span class="value">"submit"</span> <span class="attribute">class</span>=<span class="value">"button-green"</span> <span class="attribute">value</span>=<span class="value">"��诲��"</span> /></span></div><div class="line"> <span class="tag"></<span class="title">p</span>></span></div><div class="line"><span class="tag"></<span class="title">form</span>></span></div></pre></td></tr></table></figure>
<p>写js代码</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">String javascript = <span class="string">"javascript: document.getElementsByClassName(\"button-green\")[0].onclick = function() {\n"</span> +</div><div class="line"> <span class="string">" var username = document.getElementById(\"id_username\").value;\n"</span> +</div><div class="line"> <span class="string">" var password = document.getElementById(\"id_password\").value;\n"</span> +</div><div class="line"> <span class="string">" bridge.saveData(username, password);\n"</span> +</div><div class="line"> <span class="string">" };"</span>;</div></pre></td></tr></table></figure>
<h3 id="2-_js调用的java代码">2. js调用的java代码</h3>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyBridge</span> </span>{</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> String mUsername;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> String mPassword;</div><div class="line"> Context mContext;</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="title">MyBridge</span>(Context context) {</div><div class="line"> mContext = context;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@JavascriptInterface</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">saveData</span>(String username, String password) {</div><div class="line"> Toast.makeText(mContext, username + <span class="string">" "</span> + password, Toast.LENGTH_SHORT).show();</div><div class="line"> mUsername = username;</div><div class="line"> mPassword = password;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">getUsername</span>() {</div><div class="line"> <span class="keyword">return</span> mUsername;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">getPassword</span>() {</div><div class="line"> <span class="keyword">return</span> mPassword;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="3-_完整的webview布局及实现">3. 完整的webview布局及实现</h3>
<p>布局</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line"><span class="pi"><?xml version="1.0" encoding="utf-8"?></span></div><div class="line"><span class="tag"><<span class="title">WebView</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/webview"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"fill_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"fill_parent"</span></div><div class="line"> /></div></pre></td></tr></table></figure>
<p>实现</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">OAuthActivity</span> <span class="keyword">extends</span> <span class="title">Activity</span> </span>{</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String OAUTH_URI = <span class="string">"https://instagram.com/oauth/authorize/"</span>;</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String INTENT_KEY_USERNAME = <span class="string">"username"</span>;</div><div class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String INTENT_KEY_PASSWORD = <span class="string">"password"</span>;</div><div class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String INTENT_KEY_REGISTER_DATA = <span class="string">"registerData"</span>;</div><div class="line"></div><div class="line"> <span class="keyword">private</span> RegisterData mRegisterData;</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onCreate</span>(Bundle savedInstanceState) {</div><div class="line"> <span class="keyword">super</span>.onCreate(savedInstanceState);</div><div class="line"> setContentView(R.layout.activity_oauth);</div><div class="line"></div><div class="line"> init();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@SuppressLint</span>(<span class="string">"SetJavaScriptEnabled"</span>)</div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">init</span>() {</div><div class="line"> mRegisterData = (RegisterData) getIntent().getSerializableExtra(INTENT_KEY_REGISTER_DATA);</div><div class="line"></div><div class="line"> WebView myWebView = (WebView) findViewById(R.id.webview);</div><div class="line"> WebSettings webSettings = myWebView.getSettings();</div><div class="line"> webSettings.setJavaScriptEnabled(<span class="keyword">true</span>);</div><div class="line"> myWebView.addJavascriptInterface(<span class="keyword">new</span> MyBridge(OAuthActivity.<span class="keyword">this</span>), <span class="string">"bridge"</span>);</div><div class="line"> myWebView.setWebViewClient(<span class="keyword">new</span> MyWebViewClient());</div><div class="line"> myWebView.loadUrl(getOAuthUrl());</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> String <span class="title">getOAuthUrl</span>() {</div><div class="line"> <span class="comment">// https://instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token</span></div><div class="line"> StringBuilder builder = <span class="keyword">new</span> StringBuilder();</div><div class="line"> builder.append(OAUTH_URI);</div><div class="line"> builder.append(<span class="string">"?client_id="</span> + mRegisterData.getClientId());</div><div class="line"> builder.append(<span class="string">"&redirect_uri="</span> + Uri.encode(mRegisterData.getRedirectUri()));</div><div class="line"> builder.append(<span class="string">"&response_type="</span> + mRegisterData.getReponseCode());</div><div class="line"> String url = builder.toString();</div><div class="line"> System.out.println(<span class="string">"====== getOAuthUrl ===="</span> + url);</div><div class="line"> <span class="keyword">return</span> url;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="class"><span class="keyword">class</span> <span class="title">MyWebViewClient</span> <span class="keyword">extends</span> <span class="title">WebViewClient</span> </span>{</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">shouldOverrideUrlLoading</span>(WebView view, String url) {</div><div class="line"> System.out.println(<span class="string">"====== shouldOverrideUrlLoading url ===="</span> + url);</div><div class="line"> <span class="keyword">if</span> (Uri.parse(url).getHost().equals(Uri.parse(mRegisterData.getRedirectUri()).getHost())) {</div><div class="line"> String error = Uri.parse(url).getQueryParameter(<span class="string">"error"</span>);</div><div class="line"> handleReturnCode(error);</div><div class="line"> CookieSyncManager.createInstance(OAuthActivity.<span class="keyword">this</span>);</div><div class="line"> CookieManager cookieManager = CookieManager.getInstance();</div><div class="line"> cookieManager.removeAllCookie();</div><div class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onPageFinished</span>(WebView view, String url) {</div><div class="line"> <span class="comment">//System.out.println("====== onPageFinished url====" + url);</span></div><div class="line"> <span class="keyword">if</span> (url.contains(<span class="string">"login"</span>)) {</div><div class="line"> view.addJavascriptInterface(<span class="keyword">new</span> MyBridge(OAuthActivity.<span class="keyword">this</span>), <span class="string">"bridge"</span>);</div><div class="line"> String javascript = <span class="string">"javascript: document.getElementsByClassName(\"button-green\")[0].onclick = function() {\n"</span> +</div><div class="line"> <span class="string">" var username = document.getElementById(\"id_username\").value;\n"</span> +</div><div class="line"> <span class="string">" var password = document.getElementById(\"id_password\").value;\n"</span> +</div><div class="line"> <span class="string">" bridge.saveData(username, password);\n"</span> +</div><div class="line"> <span class="string">" };"</span>;</div><div class="line"> view.loadUrl(javascript);</div><div class="line"> }</div><div class="line"> <span class="keyword">super</span>.onPageFinished(view, url);</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">handleReturnCode</span>(String error) {</div><div class="line"> System.out.println(<span class="string">"====== handleReturnCode error ===="</span> + error);</div><div class="line"> Intent intent = <span class="keyword">new</span> Intent();</div><div class="line"> <span class="keyword">if</span> (error == <span class="keyword">null</span>) {</div><div class="line"> intent.putExtra(INTENT_KEY_USERNAME, MyBridge.getUsername());</div><div class="line"> intent.putExtra(INTENT_KEY_PASSWORD, MyBridge.getPassword());</div><div class="line"> setResult(RESULT_OK, intent);</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> setResult(RESULT_CANCELED, intent);</div><div class="line"> }</div><div class="line"> finish();</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="4-_调用OAuth_的Activtiy">4. 调用OAuth 的Activtiy</h3>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MainActivity</span> <span class="keyword">extends</span> <span class="title">ActionBarActivity</span> </span>{</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String CLIENT_ID = <span class="string">"cf2cd88a0b7745a4b4f8ac673190f659"</span>;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String REDIRECT_URI = <span class="string">"http://instafollow.elasticbeanstalk.com/redirect.php?clientKey=cf2cd88"</span>;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String RESPONSE_TYPE = <span class="string">"code"</span>;</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onCreate</span>(Bundle savedInstanceState) {</div><div class="line"> <span class="keyword">super</span>.onCreate(savedInstanceState);</div><div class="line"> setContentView(R.layout.activity_main);</div><div class="line"> }</div><div class="line"></div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onClickLogin</span>(View v) {</div><div class="line"> Intent intent = <span class="keyword">new</span> Intent(<span class="keyword">this</span>, OAuthActivity.class);</div><div class="line"> RegisterData registerData = <span class="keyword">new</span> RegisterData();</div><div class="line"> registerData.setClientId(CLIENT_ID);</div><div class="line"> registerData.setRedirectUri(REDIRECT_URI);</div><div class="line"> registerData.setReponseCode(RESPONSE_TYPE);</div><div class="line"> intent.putExtra(OAuthActivity.INTENT_KEY_REGISTER_DATA,registerData);</div><div class="line"> startActivityForResult(intent, <span class="number">200</span>);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onActivityResult</span>(<span class="keyword">int</span> requestCode, <span class="keyword">int</span> resultCode, Intent data) {</div><div class="line"> <span class="keyword">if</span> (requestCode != <span class="number">200</span>) <span class="keyword">return</span>;</div><div class="line"> <span class="keyword">if</span> (resultCode == RESULT_OK) {</div><div class="line"> Toast.makeText(<span class="keyword">this</span>, <span class="string">"success "</span> + data.getStringExtra(OAuthActivity.INTENT_KEY_USERNAME)</div><div class="line"> + data.getStringExtra(OAuthActivity.INTENT_KEY_PASSWORD), Toast.LENGTH_SHORT).show();</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> Toast.makeText(<span class="keyword">this</span>, <span class="string">"fail "</span>, Toast.LENGTH_SHORT).show();</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<article id="post-TinderLiker-develop-record" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/01/29/TinderLiker-develop-record/" class="article-date">
<time datetime="2015-01-29T09:05:44.000Z" itemprop="datePublished">Jan 29 2015</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/db/">db</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/sql/">sql</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/timeHelper/">timeHelper</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/toolBar/">toolBar</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/01/29/TinderLiker-develop-record/">TinderLiker 开发总结</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="概览:">概览:</h3>
<h4 id="1-_采用ORM数据库LitePal">1. 采用ORM数据库LitePal</h4>
<h4 id="2-_ToolBar的使用">2. ToolBar的使用</h4>
<h4 id="3-_最新兼容库的下拉刷新">3. 最新兼容库的下拉刷新</h4>
<h4 id="4-_工具类">4. 工具类</h4>
<hr>
<h3 id="1-_采用ORM数据库LitePal-1">1. 采用ORM数据库LitePal</h3>
<h4 id="(1)官方介绍">(1)官方介绍</h4>
<blockquote>
<p>LitePal is an Open Source Android library that allows developers to use SQLite database extremely easy. You can finish most of the database operations without writing even a SQL statement, including create or upgrade tables, crud operations, aggregate functions, etc. The setup of LitePal is quite simple as well, you can integrate it into your project in less than 5 minutes.</p>
</blockquote>
<p><a href="https://github.com/LitePalFramework/LitePal" target="_blank" rel="external">官方地址GitHub</a></p>
<p><a href="http://blog.csdn.net/column/details/android-database-pro.html" target="_blank" rel="external">系列博客地址(中文的)</a></p>
<h4 id="(2)欣赏一下增删改查(配置超级简单,见官网)">(2)欣赏一下增删改查(配置超级简单,见官网)</h4>
<p>增</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Album album = <span class="keyword">new</span> Album();</div><div class="line">album.setName(<span class="string">"album"</span>);</div><div class="line">album.setPrice(<span class="number">10.99</span>f);</div><div class="line">album.save();</div></pre></td></tr></table></figure>
<p>删</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">DataSupport.delete(Song.class, id);</div><div class="line"></div><div class="line">DataSupport.deleteAll(Song.class, <span class="string">"duration > ?"</span> , <span class="string">"350"</span>);</div></pre></td></tr></table></figure>
<p>改</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">Album albumToUpdate = <span class="keyword">new</span> Album();</div><div class="line">albumToUpdate.setPrice(<span class="number">20.99</span>f); <span class="comment">// raise the price</span></div><div class="line">albumToUpdate.update(id);</div><div class="line"></div><div class="line">Album albumToUpdate = <span class="keyword">new</span> Album();</div><div class="line">albumToUpdate.setPrice(<span class="number">20.99</span>f); <span class="comment">// raise the price</span></div><div class="line">albumToUpdate.updateAll(<span class="string">"name = ?"</span>, <span class="string">"album"</span>);</div></pre></td></tr></table></figure>
<p>查</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">Song song = DataSupport.find(Song.class, id);</div><div class="line"></div><div class="line">List<Song> allSongs = DataSupport.findAll(Song.class);</div><div class="line"></div><div class="line">List<Song> songs = DataSupport.where(<span class="string">"name like ?"</span>, <span class="string">"song%"</span>).order(<span class="string">"duration"</span>).find(Song.class);</div></pre></td></tr></table></figure>
<h4 id="(3)踩过的坑">(3)踩过的坑</h4>
<h5 id="a-_定义model时,加上id,方便以后更新数据">a. 定义model时,加上id,方便以后更新数据</h5>
<p>如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Address</span> <span class="keyword">extends</span> <span class="title">DataSupport</span> </span>{</div><div class="line"> <span class="keyword">private</span> <span class="keyword">long</span> id;</div><div class="line"> <span class="keyword">private</span> String name;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">float</span> lat;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">float</span> lng;</div><div class="line"> <span class="keyword">private</span> Date date;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">boolean</span> checked;</div><div class="line"> <span class="keyword">private</span> <span class="keyword">boolean</span> my_location;</div><div class="line"> <span class="keyword">private</span> String owner_id;</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="title">Address</span>() {</div><div class="line"> }</div><div class="line"> ...</div><div class="line">}</div></pre></td></tr></table></figure>
<p>更新时就可以</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Tinder savedTinder = savedTinders.get(<span class="number">0</span>);</div><div class="line">savedTinder.setChanged_date(t.getChanged_date());</div><div class="line">savedTinder.setRelation(t.getRelation());</div><div class="line">savedTinder.update(savedTinder.getId());</div></pre></td></tr></table></figure>
<h5 id="b-_更新到默认值的方法有点特别">b. 更新到默认值的方法有点特别</h5>
<p>源码如下:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div></pre></td><td class="code"><pre><div class="line"><span class="javadoc">/**</span></div><div class="line"> * Updates the corresponding record by id. Use setXxx to decide which</div><div class="line"> * columns to update.</div><div class="line"> * </div><div class="line"> * <pre></div><div class="line"> * Person person = new Person();</div><div class="line"> * person.setName("Jim");</div><div class="line"> * person.update(1);</div><div class="line"> * </pre></div><div class="line"> * </div><div class="line"> * This means that the name of record 1 will be updated into Jim.<br></div><div class="line"> * </div><div class="line"> * <b>Note: </b> 1. If you set a default value to a field, the corresponding</div><div class="line"> * column won't be updated. Use {@link #setToDefault(String)} to update</div><div class="line"> * columns into default value. 2. This method couldn't update foreign key in</div><div class="line"> * database. So do not use setXxx to set associations between models.</div><div class="line"> * </div><div class="line"> *<span class="javadoctag"> @param</span> id</div><div class="line"> * Which record to update.</div><div class="line"> *<span class="javadoctag"> @return</span> The number of rows affected.</div><div class="line"> */</div><div class="line"><span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">int</span> <span class="title">update</span>(<span class="keyword">long</span> id) {</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> UpdateHandler updateHandler = <span class="keyword">new</span> UpdateHandler(Connector.getDatabase());</div><div class="line"> <span class="keyword">int</span> rowsAffected = updateHandler.onUpdate(<span class="keyword">this</span>, id);</div><div class="line"> getFieldsToSetToDefault().clear();</div><div class="line"> <span class="keyword">return</span> rowsAffected;</div><div class="line"> } <span class="keyword">catch</span> (Exception e) {</div><div class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> DataSupportException(e.getMessage());</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>所以更新到默认值的时候需要这么做:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">long</span> id = address.getId();</div><div class="line"><span class="keyword">if</span> (id > <span class="number">0</span>) {</div><div class="line"> <span class="keyword">if</span> (!address.isChecked()) {</div><div class="line"> address.setToDefault(<span class="string">"checked"</span>);</div><div class="line"> }</div><div class="line"> address.update(id);</div><div class="line">} <span class="keyword">else</span> {</div><div class="line"> address.save();</div><div class="line">}</div></pre></td></tr></table></figure>
<h5 id="c-_别忘了Proguard">c. 别忘了Proguard</h5>
<p>-keep class org.litepal.<em>* { </em>; }</p>
<h3 id="2-_ToolBar的使用-1">2. ToolBar的使用</h3>
<p><img src="http://ww3.sinaimg.cn/mw690/72589a09gw1eofv0fy9fzj20a50hwdgf.jpg" alt=""> <img src="http://ww3.sinaimg.cn/mw690/72589a09gw1eofv0g52doj20a40hpt9b.jpg" alt=""></p>
<h4 id="(1)依赖">(1)依赖</h4>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">dependencies {</div><div class="line"> compile fileTree(dir: 'libs', include: ['*.jar'])</div><div class="line"> compile 'com.android.support:appcompat-v7:21.0.2'</div><div class="line">}</div></pre></td></tr></table></figure>
<h4 id="(2)Theme配制">(2)Theme配制</h4>
<p>style.xml</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">resources</span>></span></div><div class="line"></div><div class="line"> <span class="comment"><!-- Base application theme. --></span></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"AppTheme"</span> <span class="attribute">parent</span>=<span class="value">"AppTheme.Base"</span>></span><span class="css"></span></div><div class="line"> <!<span class="tag">--</span> <span class="tag">Customize</span> <span class="tag">your</span> <span class="tag">theme</span> <span class="tag">here</span>. <span class="tag">--</span>></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"AppTheme.Base"</span> <span class="attribute">parent</span>=<span class="value">"Theme.AppCompat"</span>></span><span class="css"></span></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">windowActionBar</span>"><span class="tag">false</span></<span class="tag">item</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">android</span><span class="pseudo">:windowNoTitle"</span>><span class="tag">true</span></<span class="tag">item</span>></div><div class="line"></div><div class="line"> <!<span class="tag">--</span> <span class="tag">Actionbar</span> <span class="tag">color</span> <span class="tag">--</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">colorPrimary</span>"><span class="at_rule">@<span class="keyword">color/red</item></span></span></div><div class="line"> <!--Status bar color--></div><div class="line"> <item name=<span class="string">"colorPrimaryDark"</span>>@color/red</item></div><div class="line"> <!--Window color--></div><div class="line"> <item name=<span class="string">"android:windowBackground"</span>>@android:color/white</item></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"><span class="tag"></<span class="title">resources</span>></span></div></pre></td></tr></table></figure>
<p>v21/style.xml</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line"><span class="pi"><?xml version="1.0" encoding="utf-8"?></span></div><div class="line"><span class="tag"><<span class="title">resources</span>></span></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"AppTheme"</span> <span class="attribute">parent</span>=<span class="value">"AppTheme.Base"</span>></span><span class="css"></span></div><div class="line"> <!<span class="tag">--Navigation</span> <span class="tag">bar</span> <span class="tag">color--</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">android</span><span class="pseudo">:navigationBarColor"</span>><span class="at_rule">@<span class="keyword">color/red</item></span></span></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"><span class="tag"></<span class="title">resources</span>></span></div></pre></td></tr></table></figure>
<h4 id="(3)单独定义toolBar的布局文件toolbar-xml">(3)单独定义toolBar的布局文件<code>toolbar.xml</code></h4>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"><span class="pi"><?xml version="1.0" encoding="utf-8"?></span></div><div class="line"><span class="tag"><<span class="title">android.support.v7.widget.Toolbar</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/toolbar"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:background</span>=<span class="value">"?attr/colorPrimary"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:minHeight</span>=<span class="value">"?attr/actionBarSize"</span>></div><div class="line"></div><div class="line"><span class="tag"></<span class="title">android.support.v7.widget.Toolbar</span>></span></div></pre></td></tr></table></figure>
<h4 id="(4)其他布局文件中引入toolBar">(4)其他布局文件中引入toolBar</h4>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">LinearLayout</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:orientation</span>=<span class="value">"vertical"</span>></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">include</span></span></div><div class="line"> <span class="attribute">layout</span>=<span class="value">"@layout/toolbar"</span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/toolbar"</span> /></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">ScrollView</span></span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span>></div><div class="line"> </div><div class="line"> ...</div><div class="line"></div><div class="line"> <span class="tag"></<span class="title">ScrollView</span>></span></div><div class="line"></div><div class="line"></div><div class="line"><span class="tag"></<span class="title">LinearLayout</span>></span></div></pre></td></tr></table></figure>
<h4 id="(5)让toolBar支持actionBar">(5)让toolBar支持actionBar</h4>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">initToolBar</span>() {</div><div class="line"> Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);</div><div class="line"> setSupportActionBar(toolbar);</div><div class="line"> ActionBar actionBar = getSupportActionBar();</div><div class="line"> actionBar.setDisplayHomeAsUpEnabled(<span class="keyword">true</span>);</div><div class="line"> actionBar.setTitle(mTinder.getName());</div><div class="line"> toolbar.setNavigationOnClickListener(<span class="keyword">new</span> View.OnClickListener() {</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onClick</span>(View v) {</div><div class="line"> finish();</div><div class="line"> }</div><div class="line"> });</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="3-_最新兼容库的下拉刷新-1">3. 最新兼容库的下拉刷新</h3>
<p><img src="http://ww2.sinaimg.cn/mw690/72589a09gw1eoqhnk4jwmj209x0hnwfb.jpg" alt=""></p>
<h4 id="(1)依赖-1">(1)依赖</h4>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">dependencies {</div><div class="line"> compile fileTree(dir: 'libs', include: ['*.jar'])</div><div class="line"> compile 'com.android.support:appcompat-v7:21.0.2'</div><div class="line">}</div></pre></td></tr></table></figure>
<h4 id="(2)布局和其他的下拉刷新一样">(2)布局和其他的下拉刷新一样</h4>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">RelativeLayout</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span>></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">android.support.v4.widget.SwipeRefreshLayout</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/frag_liker_refresh_layout"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:layout_above</span>=<span class="value">"@+id/frag_liker_bottom_layout"</span>></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">GridView</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/frag_liker_gridview"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:padding</span>=<span class="value">"8dp"</span></div><div class="line"> <span class="attribute">android:gravity</span>=<span class="value">"fill"</span></div><div class="line"> <span class="attribute">android:horizontalSpacing</span>=<span class="value">"8dp"</span></div><div class="line"> <span class="attribute">android:numColumns</span>=<span class="value">"3"</span></div><div class="line"> <span class="attribute">android:stretchMode</span>=<span class="value">"columnWidth"</span></div><div class="line"> <span class="attribute">android:verticalSpacing</span>=<span class="value">"8dp"</span> /></div><div class="line"></div><div class="line"> <span class="tag"></<span class="title">android.support.v4.widget.SwipeRefreshLayout</span>></span></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">TextView</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/empty_content"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:textSize</span>=<span class="value">"18sp"</span></div><div class="line"> <span class="attribute">android:layout_marginTop</span>=<span class="value">"150dp"</span></div><div class="line"> <span class="attribute">android:layout_centerHorizontal</span>=<span class="value">"true"</span></div><div class="line"> <span class="attribute">android:textColor</span>=<span class="value">"#ababab"</span></div><div class="line"> <span class="attribute">android:visibility</span>=<span class="value">"gone"</span></div><div class="line"> <span class="attribute">android:gravity</span>=<span class="value">"center"</span></div><div class="line"> <span class="attribute">android:lineSpacingExtra</span>=<span class="value">"6dp"</span></div><div class="line"> <span class="attribute">android:drawableTop</span>=<span class="value">"@drawable/ic_mainlikepass_smile"</span></div><div class="line"> <span class="attribute">android:text</span>=<span class="value">"@string/frag_tinder_liker_empty"</span> /></div><div class="line"></div><div class="line"><span class="tag"></<span class="title">RelativeLayout</span>></span></div></pre></td></tr></table></figure>
<p><strong>注意这里展示空列表的方式</strong></p>
<h4 id="(3)刚进入页面显示刷新图标">(3)刚进入页面显示刷新图标</h4>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div></pre></td><td class="code"><pre><div class="line"><span class="comment">// 定义Runnable</span></div><div class="line"><span class="keyword">private</span> Runnable mProgressRunnable = <span class="keyword">new</span> Runnable() {</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">run</span>() {</div><div class="line"> mSwipeRefreshLayout.setRefreshing(<span class="keyword">true</span>);</div><div class="line"> }</div><div class="line">};</div><div class="line"></div><div class="line"><span class="comment">// 第一次显示刷新</span></div><div class="line">mHandler.postDelayed(mProgressRunnable, <span class="number">100</span>);</div><div class="line"></div><div class="line"><span class="comment">// 停止刷新</span></div><div class="line">mHandler.removeCallbacks(mProgressRunnable);</div><div class="line">mSwipeRefreshLayout.setRefreshing(<span class="keyword">false</span>);</div></pre></td></tr></table></figure>
<p>如果只是在初始化是设置<code>mSwipeRefreshLayout.setRefreshing(true);</code>,刷新图标不会显示。</p>
<h3 id="4-_工具类-1">4. 工具类</h3>
<h4 id="(1)把形如1988-08-17T00:00:00-000Z的时间转换为毫秒数">(1)把形如<code>1988-08-17T00:00:00.000Z</code>的时间转换为毫秒数</h4>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">int</span> <span class="title">getAge</span>(String formattedBirthday) {</div><div class="line"> <span class="comment">// birth_date : 1988-08-17T00:00:00.000Z</span></div><div class="line"> String format = <span class="string">"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"</span>;</div><div class="line"> SimpleDateFormat sdf = <span class="keyword">new</span> SimpleDateFormat(format, Locale.US);</div><div class="line"> <span class="keyword">int</span> age = <span class="number">0</span>;</div><div class="line"> Calendar cal = Calendar.getInstance();</div><div class="line"> <span class="keyword">int</span> nowYear = cal.get(Calendar.YEAR);</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> Date date = sdf.parse(formattedBirthday);</div><div class="line"> cal.setTime(date);</div><div class="line"> <span class="keyword">int</span> birthYear = cal.get(Calendar.YEAR);</div><div class="line"> age = nowYear - birthYear;</div><div class="line"> <span class="keyword">if</span> (age < <span class="number">0</span>) age = <span class="number">0</span>;</div><div class="line"> } <span class="keyword">catch</span> (ParseException e) {</div><div class="line"> e.printStackTrace();</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> age;</div><div class="line">}</div></pre></td></tr></table></figure>
<h4 id="(2)利用Android的工具方法得到相对时间,如一天前,一周前等">(2)利用Android的工具方法得到相对时间,如一天前,一周前等</h4>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="keyword">static</span> CharSequence <span class="title">getActiveTime</span>(String formattedTime) {</div><div class="line"> String format = <span class="string">"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"</span>;</div><div class="line"> SimpleDateFormat sdf = <span class="keyword">new</span> SimpleDateFormat(format, Locale.US);</div><div class="line"> CharSequence activeTime = <span class="string">""</span>;</div><div class="line"> Calendar cal = Calendar.getInstance();</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> Date date = sdf.parse(formattedTime);</div><div class="line"> cal.setTime(date);</div><div class="line"> activeTime = DateUtils.getRelativeTimeSpanString(cal.getTimeInMillis());</div><div class="line"> } <span class="keyword">catch</span> (ParseException e) {</div><div class="line"> e.printStackTrace();</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> activeTime;</div><div class="line">}</div></pre></td></tr></table></figure>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<article id="post-toolbar-and-drawer" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/01/20/toolbar-and-drawer/" class="article-date">
<time datetime="2015-01-20T04:08:08.000Z" itemprop="datePublished">Jan 20 2015</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/drawer/">drawer</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/toolbar/">toolbar</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/01/20/toolbar-and-drawer/">toolbar 和 drawer 搭配</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="1-先看看效果">1.先看看效果</h3>
<p><img src="http://ww3.sinaimg.cn/mw690/72589a09gw1eofv0fy9fzj20a50hwdgf.jpg" alt=""> <img src="http://ww3.sinaimg.cn/mw690/72589a09gw1eofv0g52doj20a40hpt9b.jpg" alt=""></p>
<h3 id="2-定义style-xml">2.定义style.xml</h3>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">resources</span>></span></div><div class="line"></div><div class="line"> <span class="comment"><!-- Base application theme. --></span></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"AppTheme"</span> <span class="attribute">parent</span>=<span class="value">"AppTheme.Base"</span>></span><span class="css"></span></div><div class="line"> <!<span class="tag">--</span> <span class="tag">Customize</span> <span class="tag">your</span> <span class="tag">theme</span> <span class="tag">here</span>. <span class="tag">--</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">vpiTabPageIndicatorStyle</span>"><span class="at_rule">@<span class="keyword">style/TinderLiker.IndicatorStyle</item></span></span></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"AppTheme.Base"</span> <span class="attribute">parent</span>=<span class="value">"Theme.AppCompat"</span>></span><span class="css"></span></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">windowActionBar</span>"><span class="tag">false</span></<span class="tag">item</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">android</span><span class="pseudo">:windowNoTitle"</span>><span class="tag">true</span></<span class="tag">item</span>></div><div class="line"></div><div class="line"> <!<span class="tag">--</span> <span class="tag">Actionbar</span> <span class="tag">color</span> <span class="tag">--</span>></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">colorPrimary</span>"><span class="at_rule">@<span class="keyword">color/red</item></span></span></div><div class="line"> <!--Status bar color--></div><div class="line"> <item name=<span class="string">"colorPrimaryDark"</span>>@color/red</item></div><div class="line"> <!--Window color--></div><div class="line"> <item name=<span class="string">"android:windowBackground"</span>>@android:color/white</item></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">style</span> <span class="attribute">name</span>=<span class="value">"TinderLiker.IndicatorStyle"</span> <span class="attribute">parent</span>=<span class="value">"@style/Widget.TabPageIndicator"</span>></span><span class="css"></span></div><div class="line"> <<span class="tag">item</span> <span class="tag">name</span>="<span class="tag">android</span><span class="pseudo">:background"</span>><span class="at_rule">@<span class="keyword">drawable/custom_tab_indicator</item></span></span></div><div class="line"> <item name=<span class="string">"android:divider"</span>>@drawable/custom_tab_indicator_divider</item></div><div class="line"> <item name=<span class="string">"android:gravity"</span>>center</item></div><div class="line"> <item name=<span class="string">"android:textColor"</span>>@drawable/text_color_viewpager_tab</item></div><div class="line"> <item name=<span class="string">"android:textSize"</span>><span class="number">18s</span>p</item></div><div class="line"> <item name=<span class="string">"android:textStyle"</span>>normal</item></div><div class="line"> <span class="tag"></<span class="title">style</span>></span></div><div class="line"><span class="tag"></<span class="title">resources</span>></span></div></pre></td></tr></table></figure>
<h3 id="3-定义toolbar-xml_的布局视图">3.定义toolbar.xml 的布局视图</h3>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"><span class="pi"><?xml version="1.0" encoding="utf-8"?></span></div><div class="line"><span class="tag"><<span class="title">android.support.v7.widget.Toolbar</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/toolbar"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:background</span>=<span class="value">"?attr/colorPrimary"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:minHeight</span>=<span class="value">"?attr/actionBarSize"</span>></div><div class="line"></div><div class="line"><span class="tag"></<span class="title">android.support.v7.widget.Toolbar</span>></span></div></pre></td></tr></table></figure>
<h3 id="4-定义activity_main-xml_的布局视图">4.定义activity_main.xml 的布局视图</h3>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">RelativeLayout</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">xmlns:tools</span>=<span class="value">"http://schemas.android.com/tools"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">tools:context</span>=<span class="value">".MainActivity"</span>></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">include</span></span></div><div class="line"> <span class="attribute">layout</span>=<span class="value">"@layout/toolbar"</span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/toolbar"</span> /></div><div class="line"></div><div class="line"> <span class="comment"><!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. --></span></div><div class="line"> <span class="tag"><<span class="title">android.support.v4.widget.DrawerLayout</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/drawer_layout"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_below</span>=<span class="value">"@+id/toolbar"</span>></div><div class="line"></div><div class="line"> <span class="comment"><!--</span></div><div class="line"> As the main content view, the view below consumes the entire</div><div class="line"> space available using match_parent in both dimensions.</div><div class="line"> --></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">FrameLayout</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/content_frame"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span> /></div><div class="line"></div><div class="line"> <span class="comment"><!--</span></div><div class="line"> android:layout_gravity="start" tells DrawerLayout to treat</div><div class="line"> this as a sliding drawer on the left side for left-to-right</div><div class="line"> languages and on the right side for right-to-left languages.</div><div class="line"> The drawer is given a fixed width in dp and extends the full height of</div><div class="line"> the container. A solid background is used for contrast</div><div class="line"> with the content view.</div><div class="line"> --></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">ListView</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/left_drawer"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"285dp"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"match_parent"</span></div><div class="line"> <span class="attribute">android:layout_gravity</span>=<span class="value">"start"</span></div><div class="line"> <span class="attribute">android:background</span>=<span class="value">"#fff"</span> /></div><div class="line"></div><div class="line"> <span class="tag"></<span class="title">android.support.v4.widget.DrawerLayout</span>></span></div><div class="line"><span class="tag"></<span class="title">RelativeLayout</span>></span></div></pre></td></tr></table></figure>
<h3 id="5-MainActivity-java的代码">5.MainActivity.java的代码</h3>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div><div class="line">177</div><div class="line">178</div><div class="line">179</div><div class="line">180</div><div class="line">181</div><div class="line">182</div><div class="line">183</div><div class="line">184</div><div class="line">185</div><div class="line">186</div><div class="line">187</div><div class="line">188</div><div class="line">189</div><div class="line">190</div><div class="line">191</div><div class="line">192</div><div class="line">193</div><div class="line">194</div><div class="line">195</div><div class="line">196</div><div class="line">197</div><div class="line">198</div><div class="line">199</div><div class="line">200</div><div class="line">201</div><div class="line">202</div><div class="line">203</div><div class="line">204</div><div class="line">205</div><div class="line">206</div><div class="line">207</div><div class="line">208</div><div class="line">209</div><div class="line">210</div><div class="line">211</div><div class="line">212</div><div class="line">213</div><div class="line">214</div><div class="line">215</div><div class="line">216</div><div class="line">217</div><div class="line">218</div><div class="line">219</div><div class="line">220</div><div class="line">221</div><div class="line">222</div><div class="line">223</div><div class="line">224</div><div class="line">225</div><div class="line">226</div><div class="line">227</div><div class="line">228</div><div class="line">229</div><div class="line">230</div><div class="line">231</div><div class="line">232</div><div class="line">233</div><div class="line">234</div><div class="line">235</div><div class="line">236</div><div class="line">237</div><div class="line">238</div><div class="line">239</div><div class="line">240</div><div class="line">241</div><div class="line">242</div><div class="line">243</div><div class="line">244</div><div class="line">245</div><div class="line">246</div><div class="line">247</div><div class="line">248</div><div class="line">249</div><div class="line">250</div><div class="line">251</div><div class="line">252</div><div class="line">253</div><div class="line">254</div><div class="line">255</div><div class="line">256</div><div class="line">257</div><div class="line">258</div><div class="line">259</div><div class="line">260</div><div class="line">261</div><div class="line">262</div><div class="line">263</div><div class="line">264</div><div class="line">265</div><div class="line">266</div><div class="line">267</div><div class="line">268</div><div class="line">269</div><div class="line">270</div><div class="line">271</div><div class="line">272</div><div class="line">273</div><div class="line">274</div><div class="line">275</div><div class="line">276</div><div class="line">277</div><div class="line">278</div><div class="line">279</div><div class="line">280</div><div class="line">281</div><div class="line">282</div><div class="line">283</div><div class="line">284</div><div class="line">285</div><div class="line">286</div><div class="line">287</div><div class="line">288</div><div class="line">289</div><div class="line">290</div><div class="line">291</div><div class="line">292</div><div class="line">293</div><div class="line">294</div><div class="line">295</div><div class="line">296</div><div class="line">297</div><div class="line">298</div><div class="line">299</div><div class="line">300</div><div class="line">301</div><div class="line">302</div><div class="line">303</div><div class="line">304</div><div class="line">305</div><div class="line">306</div><div class="line">307</div><div class="line">308</div><div class="line">309</div><div class="line">310</div><div class="line">311</div><div class="line">312</div><div class="line">313</div><div class="line">314</div><div class="line">315</div><div class="line">316</div><div class="line">317</div><div class="line">318</div><div class="line">319</div><div class="line">320</div><div class="line">321</div><div class="line">322</div><div class="line">323</div><div class="line">324</div><div class="line">325</div><div class="line">326</div><div class="line">327</div><div class="line">328</div><div class="line">329</div><div class="line">330</div><div class="line">331</div><div class="line">332</div><div class="line">333</div><div class="line">334</div><div class="line">335</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">package</span> com.ilegendsoft.toprankapps.tinderliker.activities;</div><div class="line"></div><div class="line"><span class="keyword">import</span> android.content.Context;</div><div class="line"><span class="keyword">import</span> android.content.res.Configuration;</div><div class="line"><span class="keyword">import</span> android.graphics.Typeface;</div><div class="line"><span class="keyword">import</span> android.os.Bundle;</div><div class="line"><span class="keyword">import</span> android.os.Handler;</div><div class="line"><span class="keyword">import</span> android.support.v4.app.Fragment;</div><div class="line"><span class="keyword">import</span> android.support.v4.app.FragmentManager;</div><div class="line"><span class="keyword">import</span> android.support.v4.view.GravityCompat;</div><div class="line"><span class="keyword">import</span> android.support.v4.widget.DrawerLayout;</div><div class="line"><span class="keyword">import</span> android.support.v7.app.ActionBar;</div><div class="line"><span class="keyword">import</span> android.support.v7.app.ActionBarDrawerToggle;</div><div class="line"><span class="keyword">import</span> android.support.v7.widget.Toolbar;</div><div class="line"><span class="keyword">import</span> android.view.Menu;</div><div class="line"><span class="keyword">import</span> android.view.MenuItem;</div><div class="line"><span class="keyword">import</span> android.view.View;</div><div class="line"><span class="keyword">import</span> android.view.inputmethod.InputMethodManager;</div><div class="line"><span class="keyword">import</span> android.widget.AdapterView;</div><div class="line"><span class="keyword">import</span> android.widget.ListView;</div><div class="line"><span class="keyword">import</span> android.widget.TextView;</div><div class="line"></div><div class="line"><span class="keyword">import</span> com.android.volley.Response;</div><div class="line"><span class="keyword">import</span> com.android.volley.VolleyError;</div><div class="line"><span class="keyword">import</span> com.android.volley.toolbox.Volley;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.ilsalib.ilsautils.IlsUtilsManager;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.ilsalib.ilsautils.log.Logger;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.ilsalib.ilsazcloud.item.CloudyParameter;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.ilsalib.ilsazcloud.utils.ZCloudAccountUtils;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.ilsalib.ilsazcloud.utils.ZCloudCloudyParameterUtil;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.R;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.adapters.DrawerAdapter;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.fragments.DiscoverFragment;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.fragments.LocationFragment;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.fragments.SettingsFragment;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.fragments.TinderLikerFragment;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.fragments.TindersFragment;</div><div class="line"><span class="keyword">import</span> com.ilegendsoft.toprankapps.tinderliker.items.Drawer;</div><div class="line"></div><div class="line"><span class="keyword">import</span> java.lang.reflect.Field;</div><div class="line"><span class="keyword">import</span> java.util.ArrayList;</div><div class="line"></div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MainActivity</span> <span class="keyword">extends</span> <span class="title">BaseActivity</span> </span>{</div><div class="line"> <span class="keyword">private</span> DrawerLayout mDrawerLayout;</div><div class="line"> <span class="keyword">private</span> ListView mDrawerList;</div><div class="line"> <span class="keyword">private</span> ActionBar mActionBar;</div><div class="line"> <span class="keyword">private</span> ActionBarDrawerToggle mDrawerToggle;</div><div class="line"> <span class="keyword">private</span> DrawerAdapter mDrawerAdapter;</div><div class="line"></div><div class="line"> <span class="keyword">private</span> CharSequence mDrawerTitle;</div><div class="line"> <span class="keyword">private</span> CharSequence mTitle;</div><div class="line"> <span class="keyword">private</span> ArrayList<Drawer> mDrawers;</div><div class="line"></div><div class="line"> <span class="keyword">private</span> FragmentManager mFragmentManager;</div><div class="line"> <span class="keyword">private</span> TinderLikerFragment mTinderLikerFragment;</div><div class="line"> <span class="keyword">private</span> DiscoverFragment mDiscoverFragment;</div><div class="line"> <span class="keyword">private</span> TindersFragment mTindersFragment;</div><div class="line"> <span class="keyword">private</span> LocationFragment mLocationFragment;</div><div class="line"> <span class="keyword">private</span> SettingsFragment mSettingsFragment;</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">long</span> mLastBackPressedTime = <span class="number">0</span>;</div><div class="line"> <span class="keyword">private</span> Fragment mCurrentFragment;</div><div class="line"> <span class="keyword">private</span> Toolbar mToolbar;</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onCreate</span>(Bundle savedInstanceState) {</div><div class="line"> <span class="keyword">super</span>.onCreate(savedInstanceState);</div><div class="line"> setContentView(R.layout.activity_main);</div><div class="line"></div><div class="line"> init();</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (savedInstanceState == <span class="keyword">null</span>) {</div><div class="line"> selectItem(<span class="number">0</span>);</div><div class="line"> }</div><div class="line"> checkCloudyParameter();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">checkCloudyParameter</span>() {</div><div class="line"> ZCloudCloudyParameterUtil.getCloudyParameterRequest(Volley.newRequestQueue(<span class="keyword">this</span>),</div><div class="line"> ZCloudAccountUtils.getAccessTokenNoLogin(<span class="keyword">this</span>), <span class="keyword">this</span>,</div><div class="line"> <span class="keyword">new</span> ZCloudCloudyParameterUtil.OnSuccessListener() {</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onSuccess</span>(CloudyParameter cloudyParameter) {</div><div class="line"> IlsUtilsManager.getInstance().check(MainActivity.<span class="keyword">this</span>,</div><div class="line"> cloudyParameter.getAlternative(), cloudyParameter.getVersion(), <span class="number">0</span>, <span class="keyword">null</span>);</div><div class="line"> }</div><div class="line"> }, <span class="keyword">new</span> Response.ErrorListener() {</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onErrorResponse</span>(VolleyError volleyError) {</div><div class="line"> IlsUtilsManager.getInstance().check(MainActivity.<span class="keyword">this</span>, <span class="string">""</span>, <span class="string">""</span>, <span class="number">0</span>, <span class="keyword">null</span>);</div><div class="line"> Logger.toast(MainActivity.<span class="keyword">this</span>, R.string.network_error);</div><div class="line"> }</div><div class="line"> });</div><div class="line"> }</div><div class="line"></div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">init</span>() {</div><div class="line"> mTitle = mDrawerTitle = getTitle();</div><div class="line"></div><div class="line"> mToolbar = (Toolbar) findViewById(R.id.toolbar);</div><div class="line"> setSupportActionBar(mToolbar);</div><div class="line"></div><div class="line"> mActionBar = getSupportActionBar();</div><div class="line"> <span class="comment">// enable ActionBar app icon to behave as action to toggle nav drawer</span></div><div class="line"> <span class="comment">//mActionBar.setDisplayHomeAsUpEnabled(true);</span></div><div class="line"> <span class="comment">//mActionBar.setHomeButtonEnabled(true);</span></div><div class="line"></div><div class="line"> mDrawerList = (ListView) findViewById(R.id.left_drawer);</div><div class="line"> mDrawerList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);</div><div class="line"> initDrawerListData();</div><div class="line"> mDrawerAdapter = <span class="keyword">new</span> DrawerAdapter(<span class="keyword">this</span>, mDrawers);</div><div class="line"> mDrawerList.setAdapter(mDrawerAdapter);</div><div class="line"> mDrawerList.setOnItemClickListener(<span class="keyword">new</span> DrawerItemClickListener());</div><div class="line"></div><div class="line"> mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);</div><div class="line"> mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,</div><div class="line"> GravityCompat.START);</div><div class="line"> <span class="comment">// ActionBarDrawerToggle ties together the the proper interactions</span></div><div class="line"> <span class="comment">// between the sliding drawer and the action bar app icon</span></div><div class="line"> mDrawerToggle = <span class="keyword">new</span> ActionBarDrawerToggle(<span class="keyword">this</span>, mDrawerLayout,</div><div class="line"> mToolbar, R.string.drawer_open,</div><div class="line"> R.string.drawer_close) {</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onDrawerClosed</span>(View view) {</div><div class="line"> mActionBar.setTitle(mTitle);</div><div class="line"> supportInvalidateOptionsMenu();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onDrawerOpened</span>(View drawerView) {</div><div class="line"> mActionBar.setTitle(mDrawerTitle);</div><div class="line"> supportInvalidateOptionsMenu();</div><div class="line"> }</div><div class="line"> };</div><div class="line"> mDrawerLayout.setDrawerListener(mDrawerToggle);</div><div class="line"></div><div class="line"> initMainFragment();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">initMainFragment</span>() {</div><div class="line"> mFragmentManager = getSupportFragmentManager();</div><div class="line"> mTinderLikerFragment = TinderLikerFragment.newInstance();</div><div class="line"> mDiscoverFragment = DiscoverFragment.newInstance();</div><div class="line"> mTindersFragment = TindersFragment.newInstance();</div><div class="line"> mLocationFragment = LocationFragment.newInstance();</div><div class="line"> mSettingsFragment = SettingsFragment.newInstance();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">initDrawerListData</span>() {</div><div class="line"> mDrawers = <span class="keyword">new</span> ArrayList<Drawer>();</div><div class="line"> String[] drawerNames = getResources().getStringArray(</div><div class="line"> R.array.drawer_array);</div><div class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i < drawerNames.length; i++) {</div><div class="line"> Drawer drawer = <span class="keyword">new</span> Drawer();</div><div class="line"> <span class="keyword">switch</span> (i) {</div><div class="line"> <span class="keyword">case</span> <span class="number">0</span>:</div><div class="line"> drawer.setImageResourceId(R.drawable.btn_navgationdrawer_tinderlike);</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">1</span>:</div><div class="line"> drawer.setImageResourceId(R.drawable.btn_navgationdrawer_tinders);</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">2</span>:</div><div class="line"> drawer.setImageResourceId(R.drawable.btn_navgationdrawer_discoversetting);</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">3</span>:</div><div class="line"> drawer.setImageResourceId(R.drawable.btn_navgationdrawer_locationsetting);</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">4</span>:</div><div class="line"> drawer.setImageResourceId(R.drawable.btn_navgationdrawer_setting);</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">default</span>:</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"> drawer.setName(drawerNames[i]);</div><div class="line"> mDrawers.add(drawer);</div><div class="line"> }</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">/* Called whenever we call invalidateOptionsMenu() */</span></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">onPrepareOptionsMenu</span>(Menu menu) {</div><div class="line"> <span class="comment">// If the nav drawer is open, hide action items related to the content</span></div><div class="line"> <span class="comment">// view</span></div><div class="line"> <span class="keyword">boolean</span> drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);</div><div class="line"> <span class="keyword">if</span> (drawerOpen) hideSoftKeyBoard();</div><div class="line"> <span class="keyword">if</span> (mCurrentFragment == mTinderLikerFragment) {</div><div class="line"> <span class="keyword">int</span>[] ids = {R.id.action_auto};</div><div class="line"> controlMenuDisplay(menu, drawerOpen, ids);</div><div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (mCurrentFragment == mLocationFragment) {</div><div class="line"> <span class="keyword">int</span>[] ids = {R.id.action_search};</div><div class="line"> controlMenuDisplay(menu, drawerOpen, ids);</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="keyword">super</span>.onPrepareOptionsMenu(menu);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onResume</span>() {</div><div class="line"> <span class="keyword">super</span>.onResume();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">hideSoftKeyBoard</span>() {</div><div class="line"> InputMethodManager inputManager = (InputMethodManager) <span class="keyword">this</span></div><div class="line"> .getSystemService(Context.INPUT_METHOD_SERVICE);</div><div class="line"> <span class="comment">// check if no view has focus:</span></div><div class="line"> View view = <span class="keyword">this</span>.getCurrentFocus();</div><div class="line"> <span class="keyword">if</span> (view == <span class="keyword">null</span>)</div><div class="line"> <span class="keyword">return</span>;</div><div class="line"> inputManager.hideSoftInputFromWindow(view.getWindowToken(), <span class="number">0</span>);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">controlMenuDisplay</span>(Menu menu, <span class="keyword">boolean</span> drawerOpen, <span class="keyword">int</span>[] ids) {</div><div class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> id : ids) {</div><div class="line"> MenuItem item = menu.findItem(id);</div><div class="line"> <span class="keyword">if</span> (item != <span class="keyword">null</span>) {</div><div class="line"> item.setVisible(!drawerOpen);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">onOptionsItemSelected</span>(MenuItem item) {</div><div class="line"> <span class="comment">// The action bar home/up action should open or close the drawer.</span></div><div class="line"> <span class="comment">// ActionBarDrawerToggle will take care of this.</span></div><div class="line"> <span class="keyword">if</span> (mDrawerToggle.onOptionsItemSelected(item)) {</div><div class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="keyword">super</span>.onOptionsItemSelected(item);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="class"><span class="keyword">class</span> <span class="title">DrawerItemClickListener</span> <span class="keyword">implements</span></span></div><div class="line"> <span class="title">ListView</span>.<span class="title">OnItemClickListener</span> {</div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onItemClick</span>(AdapterView<?> parent, View view, <span class="keyword">int</span> position,</div><div class="line"> <span class="keyword">long</span> id) {</div><div class="line"> selectItem(position);</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">void</span> <span class="title">selectItem</span>(<span class="keyword">int</span> position) {</div><div class="line"> <span class="keyword">switch</span> (position) {</div><div class="line"> <span class="keyword">case</span> <span class="number">0</span>:</div><div class="line"> mCurrentFragment = mTinderLikerFragment;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">1</span>:</div><div class="line"> mCurrentFragment = mTindersFragment;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">2</span>:</div><div class="line"> mCurrentFragment = mDiscoverFragment;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">3</span>:</div><div class="line"> mCurrentFragment = mLocationFragment;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">case</span> <span class="number">4</span>:</div><div class="line"> mCurrentFragment = mSettingsFragment;</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> <span class="keyword">default</span>:</div><div class="line"> <span class="keyword">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> mFragmentManager.beginTransaction()</div><div class="line"> .replace(R.id.content_frame, mCurrentFragment).commit();</div><div class="line"></div><div class="line"> <span class="comment">// update selected item and title, then close the drawer</span></div><div class="line"> setTitle(mDrawers.get(position).getName());</div><div class="line"></div><div class="line"> <span class="comment">// handle the not smooth drawer.</span></div><div class="line"> <span class="keyword">new</span> Handler().postDelayed(<span class="keyword">new</span> Runnable() {</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">run</span>() {</div><div class="line"> mDrawerLayout.closeDrawer(mDrawerList);</div><div class="line"></div><div class="line"> }</div><div class="line"> }, <span class="number">200</span>);</div><div class="line"> }</div><div class="line"></div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setTitle</span>(CharSequence title) {</div><div class="line"> mTitle = title;</div><div class="line"> TextView titleView = getToolBarTitleTextView();</div><div class="line"> <span class="keyword">if</span> (titleView != <span class="keyword">null</span>) {</div><div class="line"> Typeface font = Typeface.createFromAsset(getAssets(), <span class="string">"SansitaOne.ttf"</span>);</div><div class="line"> titleView.setTypeface(font);</div><div class="line"> titleView.setText(mTitle);</div><div class="line"> titleView.setTextSize(<span class="number">23</span>);</div><div class="line"> titleView.setTextColor(<span class="number">0xDDFFFFFF</span>);</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> mActionBar.setTitle(mTitle);</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span> TextView <span class="title">getToolBarTitleTextView</span>() {</div><div class="line"> TextView titleTextView = <span class="keyword">null</span>;</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> Field f = mToolbar.getClass().getDeclaredField(<span class="string">"mTitleTextView"</span>);</div><div class="line"> f.setAccessible(<span class="keyword">true</span>);</div><div class="line"> titleTextView = (TextView) f.get(mToolbar);</div><div class="line"> } <span class="keyword">catch</span> (NoSuchFieldException e) {</div><div class="line"> } <span class="keyword">catch</span> (IllegalAccessException e) {</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> titleTextView;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="javadoc">/**</span></div><div class="line"> * When using the ActionBarDrawerToggle, you must call it during</div><div class="line"> * onPostCreate() and onConfigurationChanged()...</div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">onPostCreate</span>(Bundle savedInstanceState) {</div><div class="line"> <span class="keyword">super</span>.onPostCreate(savedInstanceState);</div><div class="line"> <span class="comment">// Sync the toggle state after onRestoreInstanceState has occurred.</span></div><div class="line"> mDrawerToggle.syncState();</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onConfigurationChanged</span>(Configuration newConfig) {</div><div class="line"> <span class="keyword">super</span>.onConfigurationChanged(newConfig);</div><div class="line"> <span class="comment">// Pass any configuration change to the drawer toggls</span></div><div class="line"> mDrawerToggle.onConfigurationChanged(newConfig);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="annotation">@Override</span></div><div class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onBackPressed</span>() {</div><div class="line"> <span class="keyword">if</span> (System.currentTimeMillis() - mLastBackPressedTime < <span class="number">2000</span>) {</div><div class="line"> <span class="keyword">super</span>.onBackPressed();</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> mLastBackPressedTime = System.currentTimeMillis();</div><div class="line"> Logger.toast(<span class="keyword">this</span>, R.string.exit);</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<article id="post-android-custom-menu" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2015/01/19/android-custom-menu/" class="article-date">
<time datetime="2015-01-19T03:48:46.000Z" itemprop="datePublished">Jan 19 2015</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/menu/">menu</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/toolbar/">toolbar</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2015/01/19/android-custom-menu/">android 自定义toolBar上的 action item</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="1-先看一下效果">1.先看一下效果</h3>
<p><img src="http://ww3.sinaimg.cn/mw690/72589a09gw1eoeoyncff7j20jw0k3wfu.jpg" alt=""></p>
<h3 id="2-自定义的view,action_view_auto_like-xml">2.自定义的view,action_view_auto_like.xml</h3>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line"><span class="pi"><?xml version="1.0" encoding="utf-8"?></span></div><div class="line"><span class="tag"><<span class="title">FrameLayout</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"wrap_content"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"wrap_content"</span>></div><div class="line"></div><div class="line"> <span class="tag"><<span class="title">ImageButton</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/action_auto_like_button"</span></div><div class="line"> <span class="attribute">android:layout_width</span>=<span class="value">"70dp"</span></div><div class="line"> <span class="attribute">android:layout_height</span>=<span class="value">"30dp"</span></div><div class="line"> <span class="attribute">android:scaleType</span>=<span class="value">"centerInside"</span></div><div class="line"> <span class="attribute">android:background</span>=<span class="value">"@android:color/transparent"</span></div><div class="line"> <span class="attribute">android:src</span>=<span class="value">"@drawable/btn_nav_autoliker"</span>></div><div class="line"></div><div class="line"> <span class="tag"></<span class="title">ImageButton</span>></span></div><div class="line"><span class="tag"></<span class="title">FrameLayout</span>></span></div></pre></td></tr></table></figure>
<h3 id="3-自定义的menu,menu_tinder_liker-xml">3.自定义的menu,menu_tinder_liker.xml</h3>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line"><span class="tag"><<span class="title">menu</span> <span class="attribute">xmlns:android</span>=<span class="value">"http://schemas.android.com/apk/res/android"</span></span></div><div class="line"> <span class="attribute">xmlns:tinder</span>=<span class="value">"http://schemas.android.com/apk/res-auto"</span>></div><div class="line"> <span class="tag"><<span class="title">item</span></span></div><div class="line"> <span class="attribute">android:id</span>=<span class="value">"@+id/action_auto"</span></div><div class="line"> <span class="attribute">android:actionLayout</span>=<span class="value">"@layout/action_view_auto_like"</span></div><div class="line"> <span class="attribute">android:icon</span>=<span class="value">"@drawable/btn_nav_autoliker"</span></div><div class="line"> <span class="attribute">android:orderInCategory</span>=<span class="value">"1"</span></div><div class="line"> <span class="attribute">android:title</span>=<span class="value">"@string/action_auto_like"</span></div><div class="line"> <span class="attribute">tinder:actionLayout</span>=<span class="value">"@layout/action_view_auto_like"</span></div><div class="line"> <span class="attribute">tinder:showAsAction</span>=<span class="value">"always"</span>/></div><div class="line"></div><div class="line"><span class="tag"></<span class="title">menu</span>></span></div></pre></td></tr></table></figure>
<h3 id="4-在fragment_中配置">4.在fragment 中配置</h3>
<p>现在<code>onCreateView</code>中加上<code>setHasOptionsMenu(true);</code>,让系统在fragment中初始化menu。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"><span class="annotation">@Override</span></div><div class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">onCreateOptionsMenu</span>(Menu menu, MenuInflater inflater) {</div><div class="line"> inflater.inflate(R.menu.menu_tinder_like, menu);</div><div class="line"> MenuItem searchItem = menu.findItem(R.id.action_auto);</div><div class="line"> FrameLayout layout = (FrameLayout) MenuItemCompat</div><div class="line"> .getActionView(searchItem);</div><div class="line"> layout.findViewById(R.id.action_auto_like_button)</div><div class="line"> .setOnClickListener(<span class="keyword">this</span>);</div><div class="line"> <span class="keyword">super</span>.onCreateOptionsMenu(menu, inflater);</div><div class="line">}</div></pre></td></tr></table></figure>
<p>然后在<code>onClick</code>中加入你的逻辑。</p>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<article id="post-android-studio-1-0-build" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2014/12/30/android-studio-1-0-build/" class="article-date">
<time datetime="2014-12-30T08:18:06.000Z" itemprop="datePublished">Dec 30 2014</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Studio/">Studio</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2014/12/30/android-studio-1-0-build/">Android studio 1.0 RC更新</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="build-gradle改动:">build.gradle改动:</h3>
<h3 id="1-buildTypes->release->runProguard()">1.buildTypes->release->runProguard()</h3>
<p>这里是runProguard()方法被替换了,<br>把runProguard改为minifyEnabled即可。</p>
<h3 id="2-productFlavors->google->packageName=’com-toprankapps-snapgrab’">2.productFlavors->google->packageName=’com.toprankapps.snapgrab’</h3>
<p>这里是packageName=’com.alinaapps.privatealbum’已经被替换,<br>改成applicationId ‘com.alinaapps.privatealbum’。</p>
<h3 id="3-buildTypes->applicationVariants-all">3.buildTypes->applicationVariants.all</h3>
<p>这里的applicationVariants.all方法中packageApplication这个属性被取消了。</p>
<p>原来:</p>
<p>applicationVariants.all { variant -><br>apk = variant.packageApplication.outputFile;<br>newName = apk.name.replace(“.apk”, “-v” + defaultConfig.versionName + “.apk”);<br>newName = newName.replace(“app”, “PrivateAlbum”);<br>variant.packageApplication.outputFile = new File(apk.parentFile, newName);<br>if (variant.zipAlign) {<br>variant.zipAlign.outputFile = new File(apk.parentFile, newName.replace(“-unaligned”, “”));<br>}<br>}</p>
<p>现在:</p>
<p>applicationVariants.all{ variant -><br>def apk = variant.outputs[0].outputFile;<br>def versionName = android.defaultConfig.versionName;<br>def newName = “”;<br>if (variant.buildType.name == “release”) {<br>newName = apk.name.replace(“.apk”, “_V” + versionName + “_release.apk”);<br>} else {<br>newName = apk.name.replace(“.apk”, “_V” + versionName + “_debug.apk”);<br>}<br>newName = newName.replace(“-“ + variant.buildType.name, “”);<br>variant.outputs[0].outputFile = new File(apk.parentFile, newName);<br>if (variant.outputs[0].zipAlign) {<br>variant.outputs[0].zipAlign.outputFile = new File(apk.parentFile, newName.replace(“-unaligned”, “”));<br>}<br>}</p>
<h3 id="4-android_studio中的plugin也发生了改变">4.android studio中的plugin也发生了改变</h3>
<p>这里是将”apply plugin: ‘android’,<br>改为”apply plugin: ‘com.android.application’</p>
<h3 id="5-_resConfigs,shrinkResources_去除无用资源">5. resConfigs,shrinkResources 去除无用资源</h3>
<p>defaultConfig {</p>
<p>// …</p>
<p>resConfigs “en”, “de”, “fr”, “it”<br>resConfigs “nodpi”, “hdpi”, “xhdpi”, “xxhdpi”, “xxxhdpi”<br>}</p>
<p>保留指定资源目录,去除库项目可能存在的冗余资源</p>
<p>shrinkResources 使用注意项目是否存在反射获取资源</p>
<h3 id="6-_Java_SDK_版本建议用_7_支持_Android_API_Level_8_及以上">6. Java SDK 版本建议用 7 支持 Android API Level 8 及以上</h3>
<p>compileOptions {<br>sourceCompatibility JavaVersion.VERSION_1_7<br>targetCompatibility JavaVersion.VERSION_1_7<br>}</p>
<p>Added support for Java 7 language features like multi-catch, try-with-resources, and the diamond operator.</p>
<p>Try-with-resources requires minSdkVersion 19; the rest of the new language features require minSdkVersion 8 or higher.</p>
<p>项目规模较小可以考虑采用 JDK 8,lambda 有助于代码简洁,配合 Rxjava 是极好的</p>
<p>使用见 <a href="https://github.com/evant/gradle-retrolambda" target="_blank" rel="external">https://github.com/evant/gradle-retrolambda</a></p>
<p>Android Studio 对 lambda 的支持也是极好的</p>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<article id="post-gradle-build" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2014/12/05/gradle-build/" class="article-date">
<time datetime="2014-12-05T06:38:54.000Z" itemprop="datePublished">Dec 5 2014</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Android/">Android</a>
</div>
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/gradle/">gradle</a></li></ul>
</div>
<div class="article-inner">
<input type="hidden" class="isFancy" />
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2014/12/05/gradle-build/">gradle 编译命令</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<p><code>Android Studio</code>的项目中自带了<code>gradle</code> 编译环境,如下图:<br><img src="http://ww4.sinaimg.cn/mw690/72589a09gw1emysp5vs01j20fp0d0dgq.jpg" alt=""></p>
<p><code>gradle wrapper</code> 避免了<code>gradle</code> 因版本不同引发的种种问题,使你不用在本地安装<code>gradle</code> 就可以执行编译命令。</p>
<ol>
<li><p><code>server:CardViewSample samzhao$ ./gradlew clean assemble</code></p>
<p>先清理以前编译过的文件再编译,耗时最长。我这次编译用了</p>
<p><code>BUILD SUCCESSFUL</code></p>
<p><code>Total time: 32.394 secs</code></p>
</li>
<li><p><code>server:CardViewSample samzhao$ ./gradlew assemble</code></p>
<p>不清理,采用以前编译好的,不需要重新编译的文件进行编译。许多编译项目后面都跟有<code>UP-TO-DATE</code>,如:<br><code>:app:compileDebugAidl UP-TO-DATE</code><br>这主要是更新了文件的时间戳,没有进行重新编译。这次时间明显减少了:</p>
<p><code>BUILD SUCCESSFUL</code></p>
<p><code>Total time: 8.394 secs</code></p>
</li>
<li><p><code>server:CardViewSample samzhao$ ./gradlew assemble --daemon</code></p>
<p>加上<code>--daemon</code>后缀就不用每次编译时都把<code>gradle</code>重新加载到内存了,第一次用<code>--daemon</code>,编译时间还是8秒多,但第二次运行就快很多了,如下:</p>
<p><code>BUILD SUCCESSFUL</code></p>
<p><code>Total time: 4.021 secs</code></p>
</li>
</ol>
<p>编译好的apk在如下位置:</p>
<p><img src="http://ww3.sinaimg.cn/mw690/72589a09gw1emytzr9qjmj20yy0d5q5m.jpg" alt=""></p>
<p><strong>其实<code>clean</code>和<code>assemble</code>都是<code>gradle</code>的<code>task</code></strong></p>
<p>查询tasks,如下:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">server:CardViewSample samzhao$ ./gradlew -q tasks</div><div class="line"></div><div class="line">------------------------------------------------------------</div><div class="line">All tasks runnable from root project</div><div class="line">------------------------------------------------------------</div><div class="line"></div><div class="line">Android tasks</div><div class="line">-------------</div><div class="line">androidDependencies - Displays the Android dependencies of the project</div><div class="line">signingReport - Displays the signing info <span class="keyword">for</span> each variant</div><div class="line"></div><div class="line">Build tasks</div><div class="line">-----------</div><div class="line">assemble - Assembles all variants of all applications and secondary packages.</div><div class="line">assembleDebug - Assembles all Debug builds</div><div class="line">assembleDebugTest - Assembles the Test build <span class="keyword">for</span> the Debug build</div><div class="line">assembleRelease - Assembles all Release builds</div><div class="line">build - Assembles and tests this project.</div><div class="line">buildDependents - Assembles and tests this project and all projects that depend on it.</div><div class="line">buildNeeded - Assembles and tests this project and all projects it depends on.</div><div class="line">clean - Deletes the build directory.</div><div class="line"></div><div class="line">Build Setup tasks</div><div class="line">-----------------</div><div class="line">init - Initializes a new Gradle build. [incubating]</div><div class="line">wrapper - Generates Gradle wrapper files. [incubating]</div><div class="line"></div><div class="line">Help tasks</div><div class="line">----------</div><div class="line">dependencies - Displays all dependencies declared <span class="keyword">in</span> root project <span class="string">'CardViewSample'</span>.</div><div class="line">dependencyInsight - Displays the insight into a specific dependency <span class="keyword">in</span> root project <span class="string">'CardViewSample'</span>.</div><div class="line"><span class="built_in">help</span> - Displays a <span class="built_in">help</span> message</div><div class="line">projects - Displays the sub-projects of root project <span class="string">'CardViewSample'</span>.</div><div class="line">properties - Displays the properties of root project <span class="string">'CardViewSample'</span>.</div><div class="line">tasks - Displays the tasks runnable from root project <span class="string">'CardViewSample'</span> (some of the displayed tasks may belong to subprojects).</div><div class="line"></div><div class="line">Install tasks</div><div class="line">-------------</div><div class="line">installDebug - Installs the Debug build</div><div class="line">installDebugTest - Installs the Test build <span class="keyword">for</span> the Debug build</div><div class="line">uninstallAll - Uninstall all applications.</div><div class="line">uninstallDebug - Uninstalls the Debug build</div><div class="line">uninstallDebugTest - Uninstalls the Test build <span class="keyword">for</span> the Debug build</div><div class="line">uninstallRelease - Uninstalls the Release build</div><div class="line"></div><div class="line">Verification tasks</div><div class="line">------------------</div><div class="line">check - Runs all checks.</div><div class="line">connectedAndroidTest - Installs and runs the tests <span class="keyword">for</span> Build <span class="string">'debug'</span> on connected devices.</div><div class="line">connectedCheck - Runs all device checks on currently connected devices.</div><div class="line">deviceCheck - Runs all device checks using Device Providers and Test Servers.</div><div class="line">lint - Runs lint on all variants.</div><div class="line">lintDebug - Runs lint on the Debug build</div><div class="line">lintRelease - Runs lint on the Release build</div><div class="line"></div><div class="line">To see all tasks and more detail, run with --all.</div><div class="line">server:CardViewSample samzhao$</div></pre></td></tr></table></figure>
<p><strong>参考链接:</strong></p>
<p><a href="http://blog.stylingandroid.com/tag/gradle-2/" target="_blank" rel="external">http://blog.stylingandroid.com/tag/gradle-2/</a></p>
</div>
<footer class="article-footer">
</footer>
</div>
</article>
<nav id="page-nav">
<span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><a class="page-number" href="/page/4/">4</a><a class="extend next" rel="next" href="/page/2/">Next »</a>
</nav>
<footer id="footer">
<div class="outer">
<div id="footer-info">
<div class="footer-left">
© 2015 Reacoder
</div>
<div class="footer-right">
<a href="http://hexo.io/" target="_blank">Hexo</a> Theme <a href="https://github.com/litten/hexo-theme-yilia" target="_blank">Yilia</a> by Litten
</div>
</div>
</div>
</footer>
</div>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" type="text/css">
<script src="/fancybox/jquery.fancybox.pack.js" type="text/javascript"></script>
<script src="/js/main.js" type="text/javascript"></script>
</div>
</body>
</html>