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