training_toc.cs revision 421435d2bede2788b74b07b1bab893fef98047c5
1<ul id="nav">
2
3
4  <li class="nav-section">
5    <div class="nav-section-header">
6      <a href="<?cs var:toroot ?>training/index.html">
7        Getting Started
8      </a>
9    </div>
10
11    <ul>
12      <li class="nav-section">
13        <div class="nav-section-header">
14          <a href="<?cs var:toroot ?>training/basics/firstapp/index.html"
15             description=
16             "After you've installed the Android SDK, start with this class
17             to learn the basics about Android app development."
18            >Building Your First App</a>
19        </div>
20        <ul>
21          <li><a href="<?cs var:toroot ?>training/basics/firstapp/creating-project.html">
22            Creating an Android Project
23          </a>
24          </li>
25          <li><a href="<?cs var:toroot ?>training/basics/firstapp/running-app.html">
26            Running Your Application
27          </a>
28          </li>
29          <li><a href="<?cs var:toroot ?>training/basics/firstapp/building-ui.html">
30            Building a Simple User Interface
31          </a>
32          </li>
33          <li><a href="<?cs var:toroot ?>training/basics/firstapp/starting-activity.html">
34            Starting Another Activity
35          </a>
36          </li>
37        </ul>
38      </li>
39
40      <li class="nav-section">
41        <div class="nav-section-header">
42          <a href="<?cs var:toroot ?>training/basics/activity-lifecycle/index.html"
43             description=
44             "How Android activities live and die and how to create
45             a seamless user experience by implementing lifecycle callback methods."
46            >Managing the Activity Lifecycle</a>
47        </div>
48        <ul>
49          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html">
50            Starting an Activity
51          </a>
52          </li>
53          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html">
54            Pausing and Resuming an Activity
55          </a>
56          </li>
57          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html">
58            Stopping and Restarting an Activity
59          </a>
60          </li>
61          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html">
62            Recreating an Activity
63          </a>
64          </li>
65        </ul>
66      </li>
67
68      <li class="nav-section">
69        <div class="nav-section-header">
70          <a href="<?cs var:toroot ?>training/basics/supporting-devices/index.html"
71             description=
72             "How to build your app with alternative resources that provide an
73             optimized user experience on multiple device form factors using a single APK."
74            >Supporting Different Devices</a>
75        </div>
76        <ul>
77          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/languages.html">
78            Supporting Different Languages
79          </a>
80          </li>
81          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/screens.html">
82            Supporting Different Screens
83          </a>
84          </li>
85          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/platforms.html">
86            Supporting Different Platform Versions
87          </a>
88          </li>
89        </ul>
90      </li>
91
92      <li class="nav-section">
93        <div class="nav-section-header">
94          <a href="<?cs var:toroot ?>training/basics/fragments/index.html"
95             description=
96             "How to build a user interface for your app that is flexible enough
97             to present multiple UI components on large screens and a more constrained set of
98             UI components on smaller screens&mdash;essential for building a single APK for both
99             phones and tablets."
100            >Building a Dynamic UI with Fragments</a>
101        </div>
102        <ul>
103          <li><a href="<?cs var:toroot ?>training/basics/fragments/support-lib.html">
104            Using the Support Library
105          </a>
106          </li>
107          <li><a href="<?cs var:toroot ?>training/basics/fragments/creating.html">
108            Creating a Fragment
109          </a>
110          </li>
111          <li><a href="<?cs var:toroot ?>training/basics/fragments/fragment-ui.html">
112            Building a Flexible UI
113          </a>
114          </li>
115          <li><a href="<?cs var:toroot ?>training/basics/fragments/communicating.html">
116            Communicating with Other Fragments
117          </a>
118          </li>
119        </ul>
120      </li>
121
122      <li class="nav-section">
123        <div class="nav-section-header"><a href="<?cs var:toroot?>training/basics/data-storage/index.html"
124             description=
125             "How to save data on the device, whether it's temporary files, downloaded
126             app assets, user media, structured data, or something else."
127            >Saving Data</a>
128        </div>
129        <ul>
130          <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html">
131            Saving Key-Value Sets
132          </a>
133          </li>
134          <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html">
135            Saving Files
136          </a>
137          </li>
138          <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html">
139            Saving Data in SQL Databases
140          </a>
141          </li>
142        </ul>
143      </li>
144
145      <li class="nav-section">
146        <div class="nav-section-header">
147          <a href="<?cs var:toroot ?>training/basics/intents/index.html"
148             description=
149             "How to build a user experience that leverages other apps available
150             on the device to perform advanced user tasks, such as capture a photo or view
151             an address on a map."
152            >Interacting with Other Apps</a>
153        </div>
154        <ul>
155          <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html">
156            Sending the User to Another App
157          </a>
158          </li>
159          <li><a href="<?cs var:toroot ?>training/basics/intents/result.html">
160            Getting a Result from the Activity
161          </a>
162          </li>
163          <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html">
164            Allowing Other Apps to Start Your Activity
165          </a>
166          </li>
167        </ul>
168      </li>
169
170      <li class="nav-section">
171        <div class="nav-section-header">
172          <a href="<?cs var:toroot ?>training/sharing/index.html"
173             description=
174             "How to take your app interaction to the next level by sharing
175             information with other apps, receive information back, and provide a simple and
176             scalable way to perform Share actions with user content."
177            >Sharing Content</a>
178        </div>
179        <ul>
180          <li><a href="<?cs var:toroot ?>training/sharing/send.html">
181            Sending Content to Other Apps
182          </a>
183          </li>
184          <li><a href="<?cs var:toroot ?>training/sharing/receive.html">
185            Receiving Content from Other Apps
186          </a>
187          </li>
188          <li><a href="<?cs var:toroot ?>training/sharing/shareaction.html">
189            Adding an Easy Share Action
190          </a>
191          </li>
192        </ul>
193      </li>
194    </ul>
195  </li><!-- end getting started -->
196
197
198
199
200  <li class="nav-section">
201    <div class="nav-section-header">
202      <a href="<?cs var:toroot ?>training/building-multimedia.html">
203      <span class="small">Building Apps with</span><br/>Multimedia
204      </a>
205    </div>
206    <ul>
207
208      <li class="nav-section">
209        <div class="nav-section-header">
210          <a href="<?cs var:toroot ?>training/managing-audio/index.html"
211             description=
212             "How to respond to hardware audio key presses, request audio focus
213             when playing audio, and respond appropriately to changes in audio focus."
214            >Managing Audio Playback</a>
215        </div>
216        <ul>
217          <li><a href="<?cs var:toroot ?>training/managing-audio/volume-playback.html">
218            Controlling Your App's Volume and Playback
219          </a>
220          </li>
221          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-focus.html">
222            Managing Audio Focus
223          </a>
224          </li>
225          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-output.html">
226            Dealing with Audio Output Hardware
227          </a>
228          </li>
229        </ul>
230      </li>
231
232      <li class="nav-section">
233        <div class="nav-section-header">
234          <a href="<?cs var:toroot ?>training/camera/index.html"
235             description=
236             "How to leverage existing camera apps on the user's device to capture
237             photos or control the camera hardware directly and build your own camera app."
238            >Capturing Photos</a>
239        </div>
240        <ul>
241          <li><a href="<?cs var:toroot ?>training/camera/photobasics.html">
242            Taking Photos Simply
243          </a>
244          </li>
245          <li><a href="<?cs var:toroot ?>training/camera/videobasics.html">
246            Recording Videos Simply
247          </a>
248          </li>
249          <li><a href="<?cs var:toroot ?>training/camera/cameradirect.html">
250            Controlling the Camera
251          </a>
252          </li>
253        </ul>
254      </li>
255    </ul>
256  </li>
257  <!-- End multimedia -->
258
259
260
261  <li class="nav-section">
262    <div class="nav-section-header">
263      <a href="<?cs var:toroot ?>training/building-graphics.html">
264      <span class="small">Building Apps with</span><br/>Graphics &amp; Animation
265      </a>
266    </div>
267    <ul>
268
269      <li class="nav-section">
270        <div class="nav-section-header">
271          <a href="<?cs var:toroot ?>training/displaying-bitmaps/index.html"
272             description=
273             "How to load and process bitmaps while keeping your user interface
274             responsive and avoid exceeding memory limits."
275            >Displaying Bitmaps Efficiently</a>
276        </div>
277        <ul>
278          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/load-bitmap.html">
279            Loading Large Bitmaps Efficiently
280          </a>
281          </li>
282          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/process-bitmap.html">
283            Processing Bitmaps Off the UI Thread
284          </a>
285          </li>
286          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/cache-bitmap.html">
287            Caching Bitmaps
288          </a>
289          </li>
290          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/display-bitmap.html">
291            Displaying Bitmaps in Your UI
292          </a></li>
293        </ul>
294      </li>
295
296      <li class="nav-section">
297        <div class="nav-section-header">
298          <a href="<?cs var:toroot?>training/graphics/opengl/index.html"
299             description=
300             "How to create OpenGL graphics within the Android app framework
301             and respond to touch input."
302            >Displaying Graphics with OpenGL ES</a>
303        </div>
304        <ul>
305          <li><a href="<?cs var:toroot ?>training/graphics/opengl/environment.html">
306            Building an OpenGL ES Environment
307          </a>
308          </li>
309          <li><a href="<?cs var:toroot ?>training/graphics/opengl/shapes.html">
310            Defining Shapes
311          </a>
312          </li>
313          <li><a href="<?cs var:toroot ?>training/graphics/opengl/draw.html">
314            Drawing Shapes
315          </a>
316          </li>
317          <li><a href="<?cs var:toroot ?>training/graphics/opengl/projection.html">
318            Applying Projection and Camera Views
319          </a>
320          </li>
321          <li><a href="<?cs var:toroot ?>training/graphics/opengl/motion.html">
322            Adding Motion
323          </a>
324          </li>
325          <li><a href="<?cs var:toroot ?>training/graphics/opengl/touch.html">
326            Responding to Touch Events
327          </a>
328          </li>
329        </ul>
330      </li>
331      <li class="nav-section">
332        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/animation/index.html"
333             description=
334             "How to add transitional animations to your user interface.">
335            Adding Animations
336          </a></div>
337        <ul>
338          <li><a href="<?cs var:toroot ?>training/animation/crossfade.html">
339            Crossfading Two Views
340          </a>
341          </li>
342          <li><a href="<?cs var:toroot ?>training/animation/screen-slide.html">
343            Using ViewPager for Screen Slide
344          </a>
345          </li>
346          <li><a href="<?cs var:toroot ?>training/animation/cardflip.html">
347            Displaying Card Flip Animations
348          </a>
349          </li>
350          <li><a href="<?cs var:toroot ?>training/animation/zoom.html">
351            Zooming a View
352          </a>
353          </li>
354          <li><a href="<?cs var:toroot ?>training/animation/layout.html">
355            Animating Layout Changes
356          </a>
357          </li>
358        </ul>
359      </li>
360    </ul>
361  </li>
362  <!-- End graphics and animation -->
363
364
365  <li class="nav-section">
366    <div class="nav-section-header">
367      <a href="<?cs var:toroot ?>training/building-connectivity.html">
368      <span class="small">Building Apps with</span><br/>
369              Connectivity &amp; the Cloud
370      </a>
371    </div>
372    <ul>
373
374
375      <li class="nav-section">
376        <div class="nav-section-header">
377          <a href="<?cs var:toroot ?>training/connect-devices-wirelessly/index.html"
378             description=
379             "How to find and connect to local devices using Network Service
380             Discovery and Wi-Fi Direct in order to create peer-to-peer connections."
381             >Connecting Devices Wirelessly</a>
382        </div>
383        <ul>
384          <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/nsd.html">
385            Using Network Service Discovery
386          </a>
387          </li>
388          <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/wifi-direct.html">
389            Connecting with Wi-Fi Direct
390          </a>
391          </li>
392          <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/nsd-wifi-direct.html">
393            Using Wi-Fi Direct for Service Discovery
394          </a>
395          </li>
396        </ul>
397      </li>
398
399       <li class="nav-section">
400        <div class="nav-section-header">
401          <a href="<?cs var:toroot ?>training/basics/network-ops/index.html"
402             description=
403             "How to create a network connection, monitor the connection for changes
404             in connectivity, and perform transactions with XML data."
405            >Performing Network Operations</a>
406        </div>
407        <ul>
408          <li><a href="<?cs var:toroot ?>training/basics/network-ops/connecting.html">
409            Connecting to the Network
410          </a>
411          </li>
412          <li><a href="<?cs var:toroot ?>training/basics/network-ops/managing.html">
413            Managing Network Usage
414          </a>
415          </li>
416          <li><a href="<?cs var:toroot ?>training/basics/network-ops/xml.html">
417            Parsing XML Data
418          </a>
419          </li>
420        </ul>
421      </li>
422      <li class="nav-section">
423        <div class="nav-section-header">
424          <a href="<?cs var:toroot ?>training/efficient-downloads/index.html"
425             description=
426             "How to minimize your app's impact on the battery when performing downloads
427             and other network transactions."
428            >Transferring Data Without Draining the Battery</a>
429        </div>
430        <ul>
431          <li><a href="<?cs var:toroot ?>training/efficient-downloads/efficient-network-access.html">
432            Optimizing Downloads for Efficient Network Access
433          </a>
434          </li>
435          <li><a href="<?cs var:toroot ?>training/efficient-downloads/regular_updates.html">
436            Minimizing the Effect of Regular Updates
437          </a>
438          </li>
439          <li><a href="<?cs var:toroot ?>training/efficient-downloads/redundant_redundant.html">
440            Redundant Downloads are Redundant
441          </a>
442          </li>
443          <li><a href="<?cs var:toroot ?>training/efficient-downloads/connectivity_patterns.html">
444            Modifying Patterns Based on the Connectivity Type
445          </a>
446          </li>
447        </ul>
448      </li>
449
450      <li class="nav-section">
451        <div class="nav-section-header">
452          <a href="<?cs var:toroot ?>training/cloudsync/index.html"
453             description=
454             "How to sync and back up app and user data to remote web services in the
455              cloud and how to restore the data back to multiple devices."
456            >Syncing to the Cloud</a>
457        </div>
458        <ul>
459          <li><a href="<?cs var:toroot ?>training/cloudsync/backupapi.html">
460            Using the Backup API
461          </a>
462          </li>
463          <li><a href="<?cs var:toroot ?>training/cloudsync/gcm.html">
464            Making the Most of Google Cloud Messaging
465          </a>
466          </li>
467        </ul>
468      </li>
469    </ul>
470  </li>
471  <!-- End connectivity and cloud -->
472
473
474
475  <li class="nav-section">
476    <div class="nav-section-header">
477      <a href="<?cs var:toroot ?>training/building-userinfo.html">
478      <span class="small">Building Apps with</span><br/>
479              User Info &amp; Location
480      </a>
481    </div>
482    <ul>
483      <li class="nav-section">
484        <div class="nav-section-header">
485          <a href="<?cs var:toroot ?>training/contacts-provider/index.html"
486             description=
487             "How to use Android's central address book, the Contacts Provider, to
488             display contacts and their details and modify contact information.">
489          Accessing Contacts Data</a>
490        </div>
491        <ul>
492          <li>
493                <a href="<?cs var:toroot ?>training/contacts-provider/retrieve-names.html">
494                Retrieving a List of Contacts
495                </a>
496          </li>
497          <li>
498                <a href="<?cs var:toroot ?>training/contacts-provider/retrieve-details.html">
499                Retrieving Details for a Contact
500                </a>
501          </li>
502          <li>
503                <a href="<?cs var:toroot ?>training/contacts-provider/modify-data.html">
504                Modifying Contacts Using Intents
505                </a>
506          </li>
507          <li>
508                <a href="<?cs var:toroot ?>training/contacts-provider/display-contact-badge.html">
509                Displaying the Quick Contact Badge
510                </a>
511          </li>
512        </ul>
513      </li>
514      <li class="nav-section">
515        <div class="nav-section-header">
516          <a href="<?cs var:toroot ?>training/id-auth/index.html"
517             description=
518             "How to remember the user by account, authenticate the user, acquire user permission
519             for the user's online data, and create custom accounts on the device."
520            >Remembering Users</a>
521        </div>
522        <ul>
523          <li><a href="<?cs var:toroot ?>training/id-auth/identify.html">
524            Remembering Your User
525          </a>
526          </li>
527          <li><a href="<?cs var:toroot ?>training/id-auth/authenticate.html">
528            Authenticating to OAuth2 Services
529          </a>
530          </li>
531          <li><a href="<?cs var:toroot ?>training/id-auth/custom_auth.html">
532            Creating a Custom Account Type
533          </a>
534          </li>
535        </ul>
536      </li>
537
538      <li class="nav-section">
539        <div class="nav-section-header">
540          <a href="<?cs var:toroot ?>training/basics/location/index.html"
541             description=
542             "How to add location-aware features to your app by aqcuiring the user's current
543             location."
544            >Making Your App Location Aware</a>
545        </div>
546        <ul>
547          <li><a href="<?cs var:toroot ?>training/basics/location/locationmanager.html">
548            Using the Location Manager
549          </a>
550          </li>
551          <li><a href="<?cs var:toroot ?>training/basics/location/currentlocation.html">
552            Obtaining the Current Location
553          </a>
554          </li>
555          <li><a href="<?cs var:toroot ?>training/basics/location/geocoding.html">
556            Displaying a Location Address
557          </a>
558          </li>
559        </ul>
560      </li>
561    </ul>
562  </li>
563  <!-- End privacy and location -->
564
565
566
567  <li class="nav-section">
568    <div class="nav-section-header">
569      <a href="<?cs var:toroot ?>training/best-ux.html">
570      <span class="small">Best Practices for</span><br/>
571              User Experience &amp; UI
572      </a>
573    </div>
574    <ul>
575
576      <li class="nav-section">
577        <div class="nav-section-header">
578          <a href="<?cs var:toroot ?>training/design-navigation/index.html"
579             description=
580             "How to plan your app's screen hierarchy and forms of navigation so users can
581             effectively and intuitively traverse your app content using various navigation
582             patterns."
583            >Designing Effective Navigation</a>
584        </div>
585        <ul>
586          <li><a href="<?cs var:toroot ?>training/design-navigation/screen-planning.html">
587            Planning Screens and Their Relationships
588          </a>
589          </li>
590          <li><a href="<?cs var:toroot ?>training/design-navigation/multiple-sizes.html">
591            Planning for Multiple Touchscreen Sizes
592          </a>
593          </li>
594          <li><a href="<?cs var:toroot ?>training/design-navigation/descendant-lateral.html">
595            Providing Descendant and Lateral Navigation
596          </a>
597          </li>
598          <li><a href="<?cs var:toroot ?>training/design-navigation/ancestral-temporal.html">
599            Providing Ancestral and Temporal Navigation
600          </a>
601          </li>
602          <li><a href="<?cs var:toroot ?>training/design-navigation/wireframing.html">
603            Putting it All Together: Wireframing the Example App
604          </a>
605          </li>
606        </ul>
607      </li>
608
609      <li class="nav-section">
610        <div class="nav-section-header">
611          <a href="<?cs var:toroot ?>training/implementing-navigation/index.html"
612             description=
613             "How to implement various navigation patterns such as swipe views and up navigation."
614            >Implementing Effective Navigation</a>
615        </div>
616        <ul>
617          <li><a href="<?cs var:toroot ?>training/implementing-navigation/lateral.html">
618            Implementing Lateral Navigation
619          </a>
620          </li>
621          <li><a href="<?cs var:toroot ?>training/implementing-navigation/ancestral.html">
622            Implementing Ancestral Navigation
623          </a>
624          </li>
625          <li><a href="<?cs var:toroot ?>training/implementing-navigation/temporal.html">
626            Implementing Temporal Navigation
627          </a>
628          </li>
629          <li><a href="<?cs var:toroot ?>training/implementing-navigation/descendant.html">
630            Implementing Descendant Navigation
631          </a>
632          </li>
633        </ul>
634      </li>
635
636      <li class="nav-section">
637          <div class="nav-section-header">
638              <a href="<?cs var:toroot ?>training/notify-user/index.html"
639                 description=
640                 "How to display messages called notifications outside of
641                 your application's UI."
642               >Notifying the User</a>
643          </div>
644          <ul>
645              <li>
646                  <a href="<?cs var:toroot ?>training/notify-user/build-notification.html">
647                  Building a Notification
648                  </a>
649              </li>
650              <li>
651                  <a href="<?cs var:toroot ?>training/notify-user/navigation.html">
652                  Preserving Navigation when Starting an Activity
653                  </a>
654              </li>
655              <li>
656                  <a href="<?cs var:toroot ?>training/notify-user/managing.html">
657                  Updating Notifications
658                  </a>
659              </li>
660              <li>
661                  <a href="<?cs var:toroot ?>training/notify-user/expanded.html">
662                  Using Big View Styles
663                  </a>
664              </li>
665              <li>
666                  <a href="<?cs var:toroot ?>training/notify-user/display-progress.html">
667                  Displaying Progress in a Notification
668                  </a>
669              </li>
670          </ul>
671      </li>
672
673      <li class="nav-section">
674        <div class="nav-section-header">
675          <a href="<?cs var:toroot ?>training/search/index.html"
676             description=
677             "How to properly add a search interface to your app and create a searchable database."
678            >Adding Search Functionality</a>
679        </div>
680        <ul>
681          <li><a href="<?cs var:toroot ?>training/search/setup.html">
682            Setting up the Search Interface
683          </a>
684          </li>
685          <li><a href="<?cs var:toroot ?>training/search/search.html">
686            Storing and Searching for Data
687          </a>
688          </li>
689          <li><a href="<?cs var:toroot ?>training/search/backward-compat.html">
690            Remaining Backward Compatible
691          </a>
692          </li>
693        </ul>
694      </li>
695
696
697      <li class="nav-section">
698        <div class="nav-section-header">
699          <a href="/training/multiscreen/index.html"
700             zh-CN-lang="针对多种屏幕进行设计"
701             ja-lang="複数画面のデザイン"
702             es-lang="mo diseñar aplicaciones para varias pantallas"
703             description=
704             "How to build a user interface that's flexible enough to
705             fit perfectly on any screen and how to create different interaction
706             patterns that are optimized for different screen sizes."
707            >Designing for Multiple Screens</a>
708        </div>
709        <ul>
710          <li><a href="/training/multiscreen/screensizes.html"
711            zh-CN-lang="支持各种屏幕尺寸"
712            ko-lang="다양한 화면 크기 지원"
713            ja-lang="さまざまな画面サイズのサポート"
714            es-lang="Cómo admitir varios tamaños de pantalla"
715            >Supporting Different Screen Sizes</a>
716          </li>
717          <li><a href="/training/multiscreen/screendensities.html"
718            zh-CN-lang="支持各种屏幕密度"
719            ja-lang="さまざまな画面密度のサポート"
720            es-lang="Cómo admitir varias densidades de pantalla"
721            >Supporting Different Screen Densities</a>
722          </li>
723          <li><a href="/training/multiscreen/adaptui.html"
724            zh-CN-lang="实施自适应用户界面流程"
725            ja-lang="順応性のある UI フローの実装"
726            es-lang="Cómo implementar interfaces de usuario adaptables"
727            >Implementing Adaptive UI Flows</a>
728          </li>
729        </ul>
730      </li>
731
732      <li class="nav-section">
733        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/tv/index.html"
734             description=
735             "How to optimize your app's user interface and user input for
736             the &quot;ten foot experience&quot; of a TV screen."
737            >Designing for TV</a>
738        </div>
739        <ul>
740          <li><a href="<?cs var:toroot ?>training/tv/optimizing-layouts-tv.html">
741            Optimizing Layouts for TV
742          </a>
743          </li>
744          <li><a href="<?cs var:toroot ?>training/tv/optimizing-navigation-tv.html">
745            Optimizing Navigation for TV
746          </a>
747          </li>
748          <li><a href="<?cs var:toroot ?>training/tv/unsupported-features-tv.html">
749            Handling Features Not Supported on TV
750          </a>
751          </li>
752        </ul>
753      </li>
754
755      <li class="nav-section">
756        <div class="nav-section-header">
757          <a href="<?cs var:toroot ?>training/custom-views/index.html"
758             description=
759             "How to build custom UI widgets that are interactive and smooth."
760            >Creating Custom Views</a>
761        </div>
762        <ul>
763          <li><a href="<?cs var:toroot ?>training/custom-views/create-view.html">
764            Creating a Custom View Class
765          </a>
766          </li>
767          <li><a href="<?cs var:toroot ?>training/custom-views/custom-drawing.html">
768            Implementing Custom Drawing
769          </a>
770          </li>
771          <li><a href="<?cs var:toroot ?>training/custom-views/making-interactive.html">
772            Making the View Interactive
773          </a>
774          </li>
775          <li><a href="<?cs var:toroot ?>training/custom-views/optimizing-view.html">
776            Optimizing the View
777          </a>
778          </li>
779        </ul>
780      </li>
781
782      <li class="nav-section">
783        <div class="nav-section-header">
784          <a href="<?cs var:toroot ?>training/backward-compatible-ui/index.html"
785             description=
786             "How to use UI components and other APIs from the more recent versions of Android
787             while remaining compatible with older versions of the platform."
788            >Creating Backward-Compatible UIs</a>
789        </div>
790        <ul>
791          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/abstracting.html">
792            Abstracting the New APIs
793          </a>
794          </li>
795          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/new-implementation.html">
796            Proxying to the New APIs
797          </a>
798          </li>
799          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/older-implementation.html">
800            Creating an Implementation with Older APIs
801          </a>
802          </li>
803          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/using-component.html">
804            Using the Version-Aware Component
805          </a>
806          </li>
807        </ul>
808      </li>
809
810      <li class="nav-section">
811        <div class="nav-section-header">
812          <a href="<?cs var:toroot ?>training/accessibility/index.html"
813             description=
814             "How to make your app accessible to users with vision
815             impairment or other physical disabilities."
816            >Implementing Accessibility</a>
817        </div>
818        <ul>
819          <li><a href="<?cs var:toroot ?>training/accessibility/accessible-app.html">
820            Developing Accessible Applications
821          </a>
822          </li>
823          <li><a href="<?cs var:toroot ?>training/accessibility/service.html">
824            Developing Accessibility Services
825          </a>
826          </li>
827        </ul>
828      </li>
829
830    </ul>
831  </li>
832  <!-- End best UX and UI -->
833
834
835  <li class="nav-section">
836    <div class="nav-section-header">
837      <a href="<?cs var:toroot ?>training/best-user-input.html">
838      <span class="small">Best Practices for</span><br/>
839              User Input
840      </a>
841    </div>
842    <ul>
843
844      <li class="nav-section">
845        <div class="nav-section-header">
846          <a href="<?cs var:toroot ?>training/gestures/index.html"
847             description=
848             "How to write apps that allow users to interact with the touch screen via touch gestures."
849            >Using Touch Gestures</a>
850        </div>
851        <ul>
852          <li><a href="<?cs var:toroot ?>training/gestures/detector.html">
853            Detecting Common Gestures
854          </a>
855          </li>
856          <li><a href="<?cs var:toroot ?>training/gestures/movement.html">
857            Tracking Movement
858          </a>
859          </li>
860          <li><a href="<?cs var:toroot ?>training/gestures/scroll.html">
861            Animating a Scroll Gesture
862          </a>
863          </li>
864          <li><a href="<?cs var:toroot ?>training/gestures/multi.html">
865            Handling Multi-Touch Gestures
866          </a>
867          </li>
868          <li><a href="<?cs var:toroot ?>training/gestures/scale.html">
869            Dragging and Scaling
870          </a>
871          </li>
872          <li><a href="<?cs var:toroot ?>training/gestures/viewgroup.html">
873            Managing Touch Events in a ViewGroup
874          </a>
875          </li>
876        </ul>
877      </li>
878
879      <li class="nav-section">
880        <div class="nav-section-header">
881          <a href="<?cs var:toroot ?>training/keyboard-input/index.html"
882             description=
883             "How to specify the appearance and behaviors of soft input methods (such
884             as on-screen keyboards) and how to optimize the experience with
885             hardware keyboards."
886            >Handling Keyboard Input</a>
887        </div>
888        <ul>
889          <li><a href="<?cs var:toroot ?>training/keyboard-input/style.html">
890            Specifying the Input Method Type
891          </a>
892          </li>
893          <li><a href="<?cs var:toroot ?>training/keyboard-input/visibility.html">
894            Handling Input Method Visibility
895          </a>
896          </li>
897          <li><a href="<?cs var:toroot ?>training/keyboard-input/navigation.html">
898            Supporting Keyboard Navigation
899          </a>
900          </li>
901          <li><a href="<?cs var:toroot ?>training/keyboard-input/commands.html">
902            Handling Keyboard Actions
903          </a>
904          </li>
905        </ul>
906      </li>
907    </ul>
908  </li> <!-- end of User Input -->
909
910  <li class="nav-section">
911    <div class="nav-section-header">
912      <a href="<?cs var:toroot ?>training/best-performance.html">
913      <span class="small">Best Practices for</span><br/>
914              Performance
915      </a>
916    </div>
917    <ul>
918
919      <li>
920        <a href="<?cs var:toroot ?>training/articles/perf-tips.html"
921           description=
922           "How to optimize your app's performance in various ways to improve its
923           responsiveness and battery efficiency."
924          >Performance Tips</a>
925      </li>
926
927      <li class="nav-section">
928        <div class="nav-section-header">
929          <a href="<?cs var:toroot ?>training/improving-layouts/index.html"
930             description=
931             "How to identify problems in your app's layout performance and improve the UI
932             responsiveness."
933            >Improving Layout Performance</a>
934        </div>
935        <ul>
936          <li><a href="<?cs var:toroot ?>training/improving-layouts/optimizing-layout.html">
937            Optimizing Layout Hierarchies
938          </a>
939          </li>
940          <li><a href="<?cs var:toroot ?>training/improving-layouts/reusing-layouts.html">
941            Re-using Layouts with &lt;include/&gt;
942          </a>
943          </li>
944          <li><a href="<?cs var:toroot ?>training/improving-layouts/loading-ondemand.html">
945            Loading Views On Demand
946          </a>
947          </li>
948          <li><a href="<?cs var:toroot ?>training/improving-layouts/smooth-scrolling.html">
949            Making ListView Scrolling Smooth
950          </a>
951          </li>
952        </ul>
953      </li>
954
955      <li class="nav-section">
956        <div class="nav-section-header">
957          <a href="<?cs var:toroot ?>training/run-background-service/index.html"
958             description=
959             "How to improve UI performance and responsiveness by sending work to a
960             Service running in the background"
961            >Running in a Background Service</a>
962        </div>
963        <ul>
964          <li><a href="<?cs var:toroot ?>training/run-background-service/create-service.html">
965            Creating a Background Service
966          </a>
967          </li>
968          <li><a href="<?cs var:toroot ?>training/run-background-service/send-request.html">
969            Sending Work Requests to the Background Service
970          </a>
971          </li>
972          <li><a href="<?cs var:toroot ?>training/run-background-service/report-status.html">
973            Reporting Work Status
974          </a>
975          </li>
976        </ul>
977      </li>
978
979      <li class="nav-section">
980        <div class="nav-section-header">
981          <a href="<?cs var:toroot ?>training/load-data-background/index.html"
982             description="How to use CursorLoader to query data without
983             affecting UI responsiveness."
984            >Loading Data in the Background</a>
985        </div>
986        <ul>
987          <li><a href="<?cs var:toroot ?>training/load-data-background/setup-loader.html">
988            Running a Query with a CursorLoader</a>
989          </li>
990          <li><a href="<?cs var:toroot ?>training/load-data-background/handle-results.html">
991            Handling the Results</a>
992          </li>
993        </ul>
994      </li>
995
996      <li class="nav-section">
997        <div class="nav-section-header">
998          <a href="/training/monitoring-device-state/index.html"
999             zh-CN-lang="优化电池使用时间"
1000             ja-lang="電池消費量の最適化"
1001             es-lang="mo optimizar la duración de la batería"
1002             description=
1003             "How to minimize the amount of power your app requires by adapting to current
1004             power conditions and performing power-hungry tasks at proper intervals."
1005            >Optimizing Battery Life</a>
1006        </div>
1007        <ul>
1008          <li><a href="/training/monitoring-device-state/battery-monitoring.html"
1009            zh-CN-lang="监控电池电量和充电状态"
1010            ja-lang="電池残量と充電状態の監視"
1011            es-lang="mo controlar el nivel de batería y el estado de carga"
1012            >Monitoring the Battery Level and Charging State</a>
1013          </li>
1014          <li><a href="/training/monitoring-device-state/docking-monitoring.html"
1015            zh-CN-lang="确定和监控基座对接状态和类型"
1016            ja-lang="ホルダーの装着状態とタイプの特定と監視"
1017            es-lang="mo determinar y controlar el tipo de conector y el estado de la conexión"
1018            >Determining and Monitoring the Docking State and Type</a>
1019          </li>
1020          <li><a href="/training/monitoring-device-state/connectivity-monitoring.html"
1021            zh-CN-lang="确定和监控网络连接状态"
1022            ja-lang="接続状態の特定と監視"
1023            es-lang="mo determinar y controlar el estado de la conectividad"
1024            >Determining and Monitoring the Connectivity Status</a>
1025          </li>
1026          <li><a href="/training/monitoring-device-state/manifest-receivers.html"
1027            zh-CN-lang="根据需要操作广播接收器"
1028            ja-lang="オンデマンドでのブロードキャスト レシーバ操作"
1029            es-lang="mo manipular los receptores de emisión bajo demanda"
1030            >Manipulating Broadcast Receivers On Demand</a>
1031          </li>
1032        </ul>
1033      </li>
1034      <li class="nav-section">
1035        <div class="nav-section-header">
1036          <a href="<?cs var:toroot ?>training/multiple-threads/index.html"
1037             description=
1038             "How to improve the performance and scalability of long-running operations by
1039              dispatching work to multiple threads.">
1040             Sending Operations to Multiple Threads</a>
1041        </div>
1042        <ul>
1043          <li><a href="<?cs var:toroot ?>training/multiple-threads/define-runnable.html">
1044            Specifying the Code to Run on a Thread
1045          </a>
1046          </li>
1047          <li><a href="<?cs var:toroot ?>training/multiple-threads/create-threadpool.html">
1048            Creating a Manager for Multiple Threads
1049          </a>
1050          </li>
1051          <li><a href="<?cs var:toroot ?>training/multiple-threads/run-code.html">
1052            Running Code on a Thread Pool Thread
1053          </a>
1054          </li>
1055          <li><a href="<?cs var:toroot ?>training/multiple-threads/communicate-ui.html">
1056            Communicating with the UI Thread
1057          </a>
1058          </li>
1059        </ul>
1060      </li>
1061
1062      <li>
1063        <a href="<?cs var:toroot ?>training/articles/perf-anr.html"
1064           description=
1065           "How to keep your app responsive to user interaction so the UI does not lock-up and
1066           display an &quot;Application Not Responding&quot; dialog."
1067          >Keeping Your App Responsive</a>
1068      </li>
1069
1070      <li>
1071        <a href="<?cs var:toroot ?>training/articles/perf-jni.html"
1072           description=
1073           "How to efficiently use the Java Native Interface with the Android NDK."
1074          >JNI Tips</a>
1075      </li>
1076      <li>
1077        <a href="<?cs var:toroot ?>training/articles/smp.html"
1078           description=
1079           "Tips for coding Android apps on symmetric multiprocessor systems."
1080          >SMP Primer for Android</a>
1081      </li>
1082    </ul>
1083  </li> <!-- end of Performance -->
1084
1085
1086
1087  <li class="nav-section">
1088    <div class="nav-section-header">
1089      <a href="<?cs var:toroot ?>training/best-security.html">
1090      <span class="small">Best Practices for</span><br/>
1091              Security &amp; Privacy
1092      </a>
1093    </div>
1094    <ul>
1095
1096      <li>
1097        <a href="<?cs var:toroot ?>training/articles/security-tips.html"
1098           description=
1099           "How to perform various tasks and keep your app's data and your user's data secure."
1100          >Security Tips</a>
1101      </li>
1102
1103      <li>
1104        <a href="<?cs var:toroot ?>training/articles/security-ssl.html"
1105           description=
1106           "How to ensure that your app is secure when performing network transactions."
1107          >Security with HTTPS and SSL</a>
1108      </li>
1109
1110      <li class="nav-section">
1111        <div class="nav-section-header">
1112          <a href="<?cs var:toroot ?>training/enterprise/index.html"
1113             description=
1114             "How to implement device management policies for enterprise-oriented apps."
1115            >Developing for Enterprise</a>
1116        </div>
1117        <ul>
1118          <li><a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html">
1119            Enhancing Security with Device Management Policies
1120          </a>
1121          </li>
1122        </ul>
1123      </li>
1124    </ul>
1125  </li>
1126  <!-- End security and user info -->
1127
1128
1129  <li class="nav-section">
1130    <div class="nav-section-header">
1131      <a href="<?cs var:toroot ?>training/distribute.html">
1132      <span class="small">Using Google Play to</span><br/>
1133              Distribute &amp; Monetize
1134      </a>
1135    </div>
1136    <ul>
1137      <li class="nav-section">
1138      <div class="nav-section-header"><a href="<?cs var:toroot ?>training/in-app-billing/index.html"
1139         description="How to sell in-app products from your application using In-app Billing.">
1140            Selling In-app Products
1141          </a></div>
1142        <ul>
1143          <li><a href="<?cs var:toroot ?>training/in-app-billing/preparing-iab-app.html">
1144            <span class="en">Preparing Your App</span>
1145          </a>
1146          </li>
1147          <li><a href="<?cs var:toroot ?>training/in-app-billing/list-iab-products.html">
1148            <span class="en">Establishing Products for Sale</span>
1149          </a>
1150          </li>
1151          <li><a href="<?cs var:toroot ?>training/in-app-billing/purchase-iab-products.html">
1152            <span class="en">Purchasing Products</span>
1153          </a>
1154          </li>
1155          <li><a href="<?cs var:toroot ?>training/in-app-billing/test-iab-app.html">
1156            <span class="en">Testing Your App</span>
1157          </a>
1158          </li>
1159        </ul>
1160      </li>
1161
1162      <li class="nav-section">
1163        <div class="nav-section-header">
1164          <a href="<?cs var:toroot ?>training/multiple-apks/index.html"
1165             description=
1166             "How to publish your app on Google Play with separate APKs that target
1167             different devices, while using a single app listing."
1168            >Maintaining Multiple APKs</a>
1169        </div>
1170        <ul>
1171          <li><a href="<?cs var:toroot ?>training/multiple-apks/api.html">
1172            Creating Multiple APKs for Different API Levels
1173          </a>
1174          </li>
1175          <li><a href="<?cs var:toroot ?>training/multiple-apks/screensize.html">
1176            Creating Multiple APKs for Different Screen Sizes
1177          </a>
1178          </li>
1179          <li><a href="<?cs var:toroot ?>training/multiple-apks/texture.html">
1180            Creating Multiple APKs for Different GL Textures
1181          </a>
1182          </li>
1183          <li><a href="<?cs var:toroot ?>training/multiple-apks/multiple.html">
1184            Creating Multiple APKs with 2+ Dimensions
1185          </a>
1186          </li>
1187        </ul>
1188      </li>
1189      <li class="nav-section">
1190        <div class="nav-section-header">
1191          <a href="<?cs var:toroot ?>training/monetization/index.html"
1192             description=
1193             "How to implement monetization strategies for your app without compromising
1194             the user experience."
1195            >Monetizing Your App</a>
1196        </div>
1197        <ul>
1198          <li><a href="<?cs var:toroot ?>training/monetization/ads-and-ux.html">
1199            Advertising without Compromising User Experience
1200          </a>
1201          </li>
1202        </ul>
1203      </li>
1204    </ul>
1205  </li>
1206  <!-- End best Publishing -->
1207
1208</ul><!-- nav -->
1209<script type="text/javascript">
1210<!--
1211    buildToggleLists();
1212    changeNavLang(getLangPref());
1213//-->
1214</script>
1215