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