| <ul id="nav"> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/index.html"> | |
| Getting Started | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/firstapp/index.html" | |
| description= | |
| "After you've installed the Android SDK, start with this class | |
| to learn the basics about Android app development." | |
| >Building Your First App</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/firstapp/creating-project.html"> | |
| Creating an Android Project | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/firstapp/running-app.html"> | |
| Running Your Application | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/firstapp/building-ui.html"> | |
| Building a Simple User Interface | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/firstapp/starting-activity.html"> | |
| Starting Another Activity | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/actionbar/index.html" | |
| description= | |
| "The action bar is one of the most important design elements you can implement for your | |
| app's activities. Although first introduced with API level 11, you can use the Support Library to | |
| include the action bar on devices running Android 2.1 or higher." | |
| >Adding the Action Bar</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/actionbar/setting-up.html"> | |
| Setting Up the Action Bar | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/actionbar/adding-buttons.html"> | |
| Adding Action Buttons | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/actionbar/styling.html"> | |
| Styling the Action Bar | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/actionbar/overlaying.html"> | |
| Overlaying the Action Bar | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/supporting-devices/index.html" | |
| description= | |
| "How to build your app with alternative resources that provide an | |
| optimized user experience on multiple device form factors using a single APK." | |
| >Supporting Different Devices</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/languages.html"> | |
| Supporting Different Languages | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/screens.html"> | |
| Supporting Different Screens | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/platforms.html"> | |
| Supporting Different Platform Versions | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/activity-lifecycle/index.html" | |
| es-lang="" | |
| ja-lang="アクティビティのライフサイクル 管理" | |
| ko-lang="액티비티 수명 주기 관리하기" | |
| pt-br-lang="Como gerenciar o ciclo de vida da atividade" | |
| ru-lang="Управление жизненным циклом операций" | |
| zh-cn-lang="管理活动生命周期" | |
| zh-tw-lang="管理應用行為顯示生命週期" | |
| description= | |
| "How Android activities live and die and how to create | |
| a seamless user experience by implementing lifecycle callback methods." | |
| >Managing the Activity Lifecycle</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html" | |
| es-lang="" | |
| ja-lang="アクティビティを開始する" | |
| ko-lang="액티비티 시작하기" | |
| pt-br-lang="Iniciando uma atividade" | |
| ru-lang="Запуск операции" | |
| zh-cn-lang="开始活动" | |
| zh-tw-lang="啟動應用行為顯示"> | |
| Starting an Activity | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html" | |
| es-lang="" | |
| ja-lang="" | |
| ko-lang="" | |
| pt-br-lang="" | |
| ru-lang="" | |
| zh-cn-lang="" | |
| zh-tw-lang=""> | |
| Pausing and Resuming an Activity | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html" | |
| es-lang="" | |
| ja-lang="アクティビティの一時停止と再開" | |
| ko-lang="액티비티 일시정지 및 재개하기" | |
| pt-br-lang="Pausando e reiniciando uma atividade" | |
| ru-lang="Приостановка и возобновление операции" | |
| zh-cn-lang="暂停和继续活动" | |
| zh-tw-lang="暫停並繼續應用行為顯示"> | |
| Stopping and Restarting an Activity | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html" | |
| es-lang="" | |
| ja-lang="アクティビティを再作成する" | |
| ko-lang="액티비티 재생성하기" | |
| pt-br-lang="Recriando uma atividade" | |
| ru-lang="Воссоздание операции" | |
| zh-cn-lang="重新创建活动" | |
| zh-tw-lang="重新建立應用行為顯示"> | |
| Recreating an Activity | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/fragments/index.html" | |
| description= | |
| "How to build a user interface for your app that is flexible enough | |
| to present multiple UI components on large screens and a more constrained set of | |
| UI components on smaller screens—essential for building a single APK for both | |
| phones and tablets." | |
| >Building a Dynamic UI with Fragments</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/fragments/creating.html"> | |
| Creating a Fragment | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/fragments/fragment-ui.html" zh-cn-lang="构建灵活的界面"> | |
| Building a Flexible UI | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/fragments/communicating.html"> | |
| Communicating with Other Fragments | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot?>training/basics/data-storage/index.html" | |
| es-lang="" | |
| ja-lang="データの保存" | |
| ko-lang="데이터 저장하기" | |
| pt-br-lang="Salvando dados" | |
| ru-lang="Сохранение данных" | |
| zh-cn-lang="保存数据" | |
| zh-tw-lang="儲存資料" | |
| description= | |
| "How to save data on the device, whether it's temporary files, downloaded | |
| app assets, user media, structured data, or something else." | |
| >Saving Data</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html" | |
| es-lang="" | |
| ja-lang="キー値セットを保存する" | |
| ko-lang="키-값 세트 저장하기" | |
| pt-br-lang="Salvando conjuntos de valor-chave" | |
| ru-lang="Сохранение наборов "\"ключ-значение\"" | |
| zh-cn-lang="保存键值集" | |
| zh-tw-lang="儲存索引鍵值組"> | |
| Saving Key-Value Sets | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html" | |
| es-lang="" | |
| ja-lang="ファイルを保存する" | |
| ko-lang="파일 저장하기" | |
| pt-br-lang="Salvando arquivos" | |
| ru-lang="Сохранение файлов" | |
| zh-cn-lang="保存文件" | |
| zh-tw-lang="儲存檔案"> | |
| Saving Files | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html" | |
| es-lang="" | |
| ja-lang="SQL データベースにデータを保存する" | |
| ko-lang="SQL 데이터베이스에 데이터 저장하기" | |
| pt-br-lang="Salvando dados em bancos de dados do SQL" | |
| ru-lang="Сохранение данных в базах данных SQL" | |
| zh-cn-lang="在 SQL 数据库中保存数据" | |
| zh-tw-lang="在 SQL 資料庫中儲存資料"> | |
| Saving Data in SQL Databases | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/intents/index.html" | |
| es-lang="" | |
| ja-lang="他のアプリとの相互操作" | |
| ko-lang="액티비티 수명 주기 관리하기" | |
| pt-br-lang="Interagindo com outros aplicativos" | |
| ru-lang="Взаимодействие с другими приложениями" | |
| zh-cn-lang="与其他应用交互" | |
| zh-tw-lang="與其他應用程式互動" | |
| description= | |
| "How to build a user experience that leverages other apps available | |
| on the device to perform advanced user tasks, such as capture a photo or view | |
| an address on a map." | |
| >Interacting with Other Apps</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html" | |
| es-lang="" | |
| ja-lang="別のアプリにユーザーを送る" | |
| ko-lang="다른 앱으로 사용자 보내기" | |
| pt-br-lang="Enviando o usuário para outro aplicativo" | |
| ru-lang="Направление пользователя в другое приложение" | |
| zh-cn-lang="向另一个应用发送用户" | |
| zh-tw-lang="將使用者傳送至其他應用程式"> | |
| Sending the User to Another App | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/intents/result.html" | |
| es-lang="" | |
| ja-lang="アクティビティから結果を取得する" | |
| ko-lang="액티비티로부터 결과 가져오기" | |
| pt-br-lang="Obtendo resultados de uma atividade" | |
| ru-lang="Получение результата операции" | |
| zh-cn-lang="获取活动的结果" | |
| zh-tw-lang="從應用行為顯示取得結果"> | |
| Getting a Result from the Activity | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html" | |
| es-lang="" | |
| ja-lang="他のアプリからのアクティビティの開始を許可する" | |
| ko-lang="다른 앱이 자신의 액티비티를 시작하도록 허용하기" | |
| pt-br-lang="Permitindo que outros aplicativos iniciem sua atividade" | |
| ru-lang="Разрешение другим приложениям на запуск вашей операции" | |
| zh-cn-lang="允许其他应用开始您的活动" | |
| zh-tw-lang="允許其他應用程式啟動您的應用行為顯示"> | |
| Allowing Other Apps to Start Your Activity | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li><!-- end getting started --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-content-sharing.html"> | |
| <span class="small">Building Apps with</span><br/>Content Sharing | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/sharing/index.html" | |
| description= | |
| "How to take your app interaction to the next level by sharing | |
| information with other apps, receive information back, and provide a simple and | |
| scalable way to perform Share actions with user content." | |
| >Sharing Simple Data</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sharing/send.html"> | |
| Sending Simple Data to Other Apps | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sharing/receive.html"> | |
| Receiving Simple Data from Other Apps | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sharing/shareaction.html"> | |
| Adding an Easy Share Action | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot?>training/secure-file-sharing/index.html" | |
| description= | |
| "How to provide secure access to a file associated with your app using a content | |
| URI and temporary access permissions." | |
| >Sharing Files</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/secure-file-sharing/setup-sharing.html"> | |
| Setting Up File Sharing | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/secure-file-sharing/share-file.html"> | |
| Sharing a File | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/secure-file-sharing/request-file.html"> | |
| Requesting a Shared File | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/secure-file-sharing/retrieve-info.html"> | |
| Retrieving File Information | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/beam-files/index.html" | |
| description= | |
| "How to transfer files between devices using the NFC Android Beam feature." | |
| >Sharing Files with NFC</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/beam-files/send-files.html" | |
| >Sending Files to Another Device</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/beam-files/receive-files.html" | |
| >Receiving Files from Another Device</a></li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-multimedia.html"> | |
| <span class="small">Building Apps with</span><br/>Multimedia | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/managing-audio/index.html" | |
| description= | |
| "How to respond to hardware audio key presses, request audio focus | |
| when playing audio, and respond appropriately to changes in audio focus." | |
| >Managing Audio Playback</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/managing-audio/volume-playback.html"> | |
| Controlling Your App's Volume and Playback | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/managing-audio/audio-focus.html"> | |
| Managing Audio Focus | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/managing-audio/audio-output.html"> | |
| Dealing with Audio Output Hardware | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/camera/index.html" | |
| description= | |
| "How to leverage existing camera apps on the user's device to capture | |
| photos or control the camera hardware directly and build your own camera app." | |
| >Capturing Photos</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/camera/photobasics.html"> | |
| Taking Photos Simply | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/camera/videobasics.html"> | |
| Recording Videos Simply | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/camera/cameradirect.html"> | |
| Controlling the Camera | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/printing/index.html" | |
| description= | |
| "How to print photos, HTML documents, and custom documents from your app." | |
| >Printing Content</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/printing/photos.html"> | |
| Photos | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/printing/html-docs.html"> | |
| HTML Documents | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/printing/custom-docs.html"> | |
| Custom Documents | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End multimedia --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-graphics.html"> | |
| <span class="small">Building Apps with</span><br/>Graphics & Animation | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/displaying-bitmaps/index.html" | |
| description= | |
| "How to load and process bitmaps while keeping your user interface | |
| responsive and avoid exceeding memory limits." | |
| >Displaying Bitmaps Efficiently</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/load-bitmap.html"> | |
| Loading Large Bitmaps Efficiently | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/process-bitmap.html"> | |
| Processing Bitmaps Off the UI Thread | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/cache-bitmap.html"> | |
| Caching Bitmaps | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/manage-memory.html"> | |
| Managing Bitmap Memory | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/display-bitmap.html"> | |
| Displaying Bitmaps in Your UI | |
| </a></li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot?>training/graphics/opengl/index.html" | |
| description= | |
| "How to create OpenGL graphics within the Android app framework | |
| and respond to touch input." | |
| >Displaying Graphics with OpenGL ES</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/environment.html"> | |
| Building an OpenGL ES Environment | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/shapes.html"> | |
| Defining Shapes | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/draw.html"> | |
| Drawing Shapes | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/projection.html"> | |
| Applying Projection and Camera Views | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/motion.html"> | |
| Adding Motion | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/graphics/opengl/touch.html"> | |
| Responding to Touch Events | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot?>training/transitions/index.html" | |
| description= | |
| "How to animate state changes in a view hierarchy using transitions." | |
| >Animating Views Using Scenes and Transitions</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/transitions/overview.html"> | |
| The Transitions Framework | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/transitions/scenes.html"> | |
| Creating a Scene | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/transitions/transitions.html"> | |
| Applying a Transition | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/transitions/custom-transitions.html"> | |
| Creating Custom Transitions | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot ?>training/animation/index.html" | |
| description= | |
| "How to add transitional animations to your user interface."> | |
| Adding Animations | |
| </a></div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/animation/crossfade.html"> | |
| Crossfading Two Views | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/animation/screen-slide.html"> | |
| Using ViewPager for Screen Slide | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/animation/cardflip.html"> | |
| Displaying Card Flip Animations | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/animation/zoom.html"> | |
| Zooming a View | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/animation/layout.html"> | |
| Animating Layout Changes | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End graphics and animation --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-connectivity.html"> | |
| <span class="small">Building Apps with</span><br/> | |
| Connectivity & the Cloud | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/connect-devices-wirelessly/index.html" | |
| description= | |
| "How to find and connect to local devices using Network Service | |
| Discovery and how to create peer-to-peer connections with Wi-Fi." | |
| >Connecting Devices Wirelessly</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/nsd.html"> | |
| Using Network Service Discovery | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/wifi-direct.html"> | |
| Creating P2P Connections with Wi-Fi | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/connect-devices-wirelessly/nsd-wifi-direct.html"> | |
| Using Wi-Fi P2P for Service Discovery | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/basics/network-ops/index.html" | |
| description= | |
| "How to create a network connection, monitor the connection for changes | |
| in connectivity, and perform transactions with XML data." | |
| >Performing Network Operations</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/basics/network-ops/connecting.html"> | |
| Connecting to the Network | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/network-ops/managing.html"> | |
| Managing Network Usage | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/basics/network-ops/xml.html"> | |
| Parsing XML Data | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/efficient-downloads/index.html" | |
| description= | |
| "How to minimize your app's impact on the battery when performing downloads | |
| and other network transactions." | |
| >Transferring Data Without Draining the Battery</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/efficient-downloads/efficient-network-access.html"> | |
| Optimizing Downloads for Efficient Network Access | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/efficient-downloads/regular_updates.html"> | |
| Minimizing the Effect of Regular Updates | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/efficient-downloads/redundant_redundant.html"> | |
| Redundant Downloads are Redundant | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/efficient-downloads/connectivity_patterns.html"> | |
| Modifying Patterns Based on the Connectivity Type | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/cloudsync/index.html" | |
| description= | |
| "How to sync and back up app and user data to remote web services in the | |
| cloud and how to restore the data back to multiple devices." | |
| >Syncing to the Cloud</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/cloudsync/backupapi.html"> | |
| Using the Backup API | |
| </a> | |
| </li> | |
| </ul> | |
| <li><a href="<?cs var:toroot ?>training/cloudsave/conflict-res.html" | |
| description= | |
| "How to design a robust conflict resolution strategy for apps that save data to the cloud." | |
| >Resolving Cloud Save Conflicts | |
| </a> | |
| </li> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/sync-adapters/index.html" | |
| description="How to transfer data between the cloud and the device using the Android | |
| sync adapter framework" | |
| >Transferring Data Using Sync Adapters</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sync-adapters/creating-authenticator.html"> | |
| Creating a Stub Authenticator | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sync-adapters/creating-stub-provider.html"> | |
| Creating a Stub Content Provider | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sync-adapters/creating-sync-adapter.html"> | |
| Creating a Sync Adapter | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/sync-adapters/running-sync-adapter.html"> | |
| Running a Sync Adapter | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/volley/index.html" | |
| description="How to perform fast, scalable UI operations over the network using Volley" | |
| >Transmitting Network Data Using Volley</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/volley/simple.html"> | |
| Sending a Simple Request | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/volley/requestqueue.html"> | |
| Setting Up a RequestQueue | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/volley/request.html"> | |
| Making a Standard Request | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/volley/request-custom.html"> | |
| Implementing a Custom Request | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End connectivity and cloud --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-location.html"> | |
| <span class="small">Building Apps with</span><br/> | |
| Location & Maps | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/location/index.html" | |
| description="How to add location-aware features to your app by getting the user's current location."> | |
| Making Your App Location-Aware | |
| </a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/location/retrieve-current.html"> | |
| Getting the Last Known Location | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/location/receive-location-updates.html"> | |
| Receiving Location Updates | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/location/display-address.html"> | |
| Displaying a Location Address | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/location/geofencing.html"> | |
| Creating and Monitoring Geofences | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <a href="<?cs var:toroot ?>training/maps/index.html" | |
| description="How to add maps and mapping information to your app."> | |
| Adding Maps | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End location and maps --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-userinfo.html"> | |
| <span class="small">Building Apps with</span><br/> | |
| Contacts & Sign-In | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/contacts-provider/index.html" | |
| description= | |
| "How to use Android's central address book, the Contacts Provider, to | |
| display contacts and their details and modify contact information."> | |
| Accessing Contacts Data</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/contacts-provider/retrieve-names.html"> | |
| Retrieving a List of Contacts | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/contacts-provider/retrieve-details.html"> | |
| Retrieving Details for a Contact | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/contacts-provider/modify-data.html"> | |
| Modifying Contacts Using Intents | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/contacts-provider/display-contact-badge.html"> | |
| Displaying the Quick Contact Badge | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <a href="<?cs var:toroot ?>training/sign-in/index.html" | |
| description="How to add user sign-in functionality to your app."> | |
| Adding Sign-In | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End user info and sign-in --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/building-wearables.html"> | |
| <span class="small">Building Apps for</span><br/> | |
| Wearables | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/wearables/notifications/index.html" | |
| description="How to build handheld notifications that are synced to | |
| and look great on wearables." | |
| >Adding Wearable Features to Notifications</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/notifications/creating.html">Creating a Notification</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/notifications/voice-input.html">Receiving Voice Input in a Notification</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/notifications/pages.html">Adding Pages to a Notification</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/notifications/stacks.html">Stacking Notifications</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/index.html" | |
| description="How to build apps that run directly on wearables." | |
| >Creating Wearable Apps</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/creating.html">Creating and Running a Wearable App</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/layouts.html">Creating Custom Layouts</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/always-on.html">Keeping Your App Visible</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/voice.html">Adding Voice Capabilities</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/packaging.html">Packaging Wearable Apps</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/apps/bt-debugging.html">Debugging over Bluetooth</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/index.html" | |
| description="How to create custom user interfaces for wearable apps." | |
| >Creating Custom UIs</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/layouts.html">Defining Layouts</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/cards.html">Creating Cards</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/lists.html">Creating Lists</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/2d-picker.html">Creating a 2D Picker</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/confirm.html">Showing Confirmations</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/ui/exit.html">Exiting Full-Screen Activities</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/index.html" | |
| description="How to sync data between handhelds and wearables." | |
| >Sending and Syncing Data</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/accessing.html">Accessing the Wearable Data Layer</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/data-items.html">Syncing Data Items</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/assets.html">Transferring Assets</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/messages.html">Sending and Receiving Messages</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/data-layer/events.html">Handling Data Layer Events</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/index.html" | |
| description="How to create watch faces for wearables." | |
| >Creating Watch Faces</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/designing.html">Designing Watch Faces</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/service.html">Building a Watch Face Service</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/drawing.html">Drawing Watch Faces</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/information.html">Showing Information in Watch Faces</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/interacting.html">Creating Interactive Watch Faces</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/configuration.html">Providing Configuration Activities</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/issues.html">Addressing Common Issues</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/wearables/watch-faces/performance.html">Optimizing Performance and Battery Life</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/wear-location-detection.html" | |
| description= | |
| "How to detect location data on Android Wear devices." | |
| >Detecting Location</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End Building for wearables --> | |
| <!-- Start: Building for TV --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/tv/index.html"> | |
| <span class="small">Building Apps for</span><br/> | |
| TV | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/tv/start/index.html" | |
| ja-lang="TV アプリのビルド" | |
| description="How to start building TV apps or extend your existing app to run on TV | |
| devices."> | |
| Building TV Apps</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/start/start.html" | |
| ja-lang="TV アプリのビルドを開始する"> | |
| Getting Started with TV Apps</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/start/hardware.html" | |
| ja-lang="TV ハードウェアを処理する"> | |
| Handling TV Hardware</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/start/layouts.html" | |
| ja-lang="TV 向けレイアウトをビルドする"> | |
| Building TV Layouts</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/start/navigation.html" | |
| ja-lang="TV 用のナビゲーションを作成する"> | |
| Creating TV Navigation</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/tv/playback/index.html" | |
| ja-lang="TV 再生アプリのビルド" | |
| description="How to build apps that provide media catalogs and play content."> | |
| Building TV Playback Apps</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/playback/browse.html" | |
| ja-lang="カタログ ブラウザを作成する"> | |
| Creating a Catalog Browser</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/playback/card.html"> | |
| Providing a Card View</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/playback/details.html" | |
| ja-lang="詳細ビューをビルドする"> | |
| Building a Details View</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/playback/now-playing.html" | |
| ja-lang="再生中カードを表示する"> | |
| Displaying a Now Playing Card</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/tv/discovery/index.html" | |
| description="How to help users discover content from your app."> | |
| Helping Users Find Content on TV</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/discovery/recommendations.html"> | |
| Recommending TV Content</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/discovery/searchable.html"> | |
| Making TV Apps Searchable</a> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/discovery/in-app-search.html"> | |
| Searching within TV Apps</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/games/index.html" | |
| description="How to build games for TV."> | |
| Building TV Games</a> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/tv/tif/index.html" | |
| description="How to build channels for TV."> | |
| Building TV Channels</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/tif/tvinput.html"> | |
| Developing a TV Input Service</a> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/tif/channel.html"> | |
| Working with Channel Data</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/tif/ui.html"> | |
| Managing User Interaction</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/tv/publishing/checklist.html" | |
| description="An itemized list of requirements for TV apps."> | |
| TV Apps Checklist</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End: Building for TV --> | |
| <!-- Start: Building for Auto --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/auto/index.html"> | |
| <span class="small">Building Apps for</span><br/> | |
| Auto | |
| </a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/auto/start/index.html" | |
| description="How to start building or extending apps that work | |
| with Auto devices."> | |
| Getting Started with Auto</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/auto/audio/index.html" | |
| description="How to extend audio apps to play content on Auto devices."> | |
| Playing Audio for Auto</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/auto/messaging/index.html" | |
| description="How to extend text messaging apps to work with Auto devices."> | |
| Messaging for Auto</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End: Building for Auto --> | |
| <!-- Start: Building for Work --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/enterprise/index.html"> | |
| <span class="small">Building Apps for</span><br/> | |
| Work | |
| </a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/enterprise/app-compatibility.html"> | |
| Ensuring Compatibility with Managed Profiles | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/enterprise/app-restrictions.html"> | |
| Implementing App Restrictions | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/enterprise/work-policy-ctrl.html"> | |
| Building a Work Policy Controller | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End: Building for Work --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-ux.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| Interaction & Engagement | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/design-navigation/index.html" | |
| description= | |
| "How to plan your app's screen hierarchy and forms of navigation so users can | |
| effectively and intuitively traverse your app content using various navigation | |
| patterns." | |
| >Designing Effective Navigation</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/design-navigation/screen-planning.html"> | |
| Planning Screens and Their Relationships | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/design-navigation/multiple-sizes.html"> | |
| Planning for Multiple Touchscreen Sizes | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/design-navigation/descendant-lateral.html"> | |
| Providing Descendant and Lateral Navigation | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/design-navigation/ancestral-temporal.html"> | |
| Providing Ancestral and Temporal Navigation | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/design-navigation/wireframing.html"> | |
| Putting it All Together: Wireframing the Example App | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/implementing-navigation/index.html" | |
| description= | |
| "How to implement various navigation patterns such as swipe views, | |
| a navigation drawer, and up navigation." | |
| >Implementing Effective Navigation</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/implementing-navigation/lateral.html"> | |
| Creating Swipe Views with Tabs | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/implementing-navigation/nav-drawer.html"> | |
| Creating a Navigation Drawer | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/implementing-navigation/ancestral.html"> | |
| Providing Up Navigation | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/implementing-navigation/temporal.html"> | |
| Providing Proper Back Navigation | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/implementing-navigation/descendant.html"> | |
| Implementing Descendant Navigation | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/notify-user/index.html" | |
| description= | |
| "How to display messages called notifications outside of | |
| your application's UI." | |
| >Notifying the User</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/notify-user/build-notification.html"> | |
| Building a Notification | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/notify-user/navigation.html"> | |
| Preserving Navigation when Starting an Activity | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/notify-user/managing.html"> | |
| Updating Notifications | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/notify-user/expanded.html"> | |
| Using Big View Styles | |
| </a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/notify-user/display-progress.html"> | |
| Displaying Progress in a Notification | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/swipe/index.html" | |
| description= | |
| "How to modify your app's layout to support manual content updates triggered by the | |
| swipe-to-refresh gesture." | |
| >Supporting Swipe-to-Refresh</a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/swipe/add-swipe-interface.html" | |
| >Adding Swipe-to-Refresh To Your App</a></li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/swipe/respond-refresh-request.html" | |
| >Responding to a Refresh Gesture</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/search/index.html" | |
| description= | |
| "How to properly add a search interface to your app and create a searchable database." | |
| >Adding Search Functionality</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/search/setup.html"> | |
| Setting up the Search Interface | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/search/search.html"> | |
| Storing and Searching for Data | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/search/backward-compat.html"> | |
| Remaining Backward Compatible | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/app-indexing/index.html" | |
| description= | |
| "How to enable deep linking and indexing of your application | |
| content so that users can open this content directly from their mobile search | |
| results." | |
| >Making Your App Content Searchable by Google</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/app-indexing/deep-linking.html"> | |
| Enabling Deep Links for App Content | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/app-indexing/enabling-app-indexing.html"> | |
| Specifying App Content for Indexing | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End Interaction and Engagement --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-ui.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| User Interface | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/multiscreen/index.html" | |
| zh-cn-lang="针对多种屏幕进行设计" | |
| ja-lang="複数画面のデザイン" | |
| es-lang="Cómo diseñar aplicaciones para varias pantallas" | |
| description= | |
| "How to build a user interface that's flexible enough to | |
| fit perfectly on any screen and how to create different interaction | |
| patterns that are optimized for different screen sizes." | |
| >Designing for Multiple Screens</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html" | |
| zh-cn-lang="支持各种屏幕尺寸" | |
| ko-lang="다양한 화면 크기 지원" | |
| ja-lang="さまざまな画面サイズのサポート" | |
| es-lang="Cómo admitir varios tamaños de pantalla" | |
| >Supporting Different Screen Sizes</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html" | |
| zh-cn-lang="支持各种屏幕密度" | |
| ja-lang="さまざまな画面密度のサポート" | |
| es-lang="Cómo admitir varias densidades de pantalla" | |
| >Supporting Different Screen Densities</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html" | |
| zh-cn-lang="实施自适应用户界面流程" | |
| ja-lang="順応性のある UI フローの実装" | |
| es-lang="Cómo implementar interfaces de usuario adaptables" | |
| >Implementing Adaptive UI Flows</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/custom-views/index.html" | |
| description= | |
| "How to build custom UI widgets that are interactive and smooth." | |
| >Creating Custom Views</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/custom-views/create-view.html"> | |
| Creating a Custom View Class | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/custom-views/custom-drawing.html"> | |
| Implementing Custom Drawing | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/custom-views/making-interactive.html"> | |
| Making the View Interactive | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/custom-views/optimizing-view.html"> | |
| Optimizing the View | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/backward-compatible-ui/index.html" | |
| description= | |
| "How to use UI components and other APIs from the more recent versions of Android | |
| while remaining compatible with older versions of the platform." | |
| >Creating Backward-Compatible UIs</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/abstracting.html"> | |
| Abstracting the New APIs | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/new-implementation.html"> | |
| Proxying to the New APIs | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/older-implementation.html"> | |
| Creating an Implementation with Older APIs | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/using-component.html"> | |
| Using the Version-Aware Component | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/accessibility/index.html" | |
| description= | |
| "How to make your app accessible to users with vision | |
| impairment or other physical disabilities." | |
| >Implementing Accessibility</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/accessibility/accessible-app.html"> | |
| Developing Accessible Applications | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/accessibility/service.html"> | |
| Developing Accessibility Services | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/system-ui/index.html" | |
| description= | |
| "How to hide and show status and navigation bars across different versions of Android, | |
| while managing the display of other screen components." | |
| >Managing the System UI</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/system-ui/dim.html"> | |
| Dimming the System Bars | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/system-ui/status.html"> | |
| Hiding the Status Bar | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/system-ui/navigation.html"> | |
| Hiding the Navigation Bar | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/system-ui/immersive.html"> | |
| Using Immersive Full-Screen Mode | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/system-ui/visibility.html"> | |
| Responding to UI Visibility Changes | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/material/index.html" | |
| description= | |
| "How to implement material design on Android." | |
| >Creating Apps with Material Design</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/material/get-started.html"> | |
| Getting Started | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/theme.html"> | |
| Using the Material Theme | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/lists-cards.html"> | |
| Creating Lists and Cards | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/shadows-clipping.html"> | |
| Defining Shadows and Clipping Views | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/drawables.html"> | |
| Working with Drawables | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/animations.html"> | |
| Defining Custom Animations | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/material/compatibility.html"> | |
| Maintaining Compatibility | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End User Interface --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-user-input.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| User Input | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/gestures/index.html" | |
| description= | |
| "How to write apps that allow users to interact with the touch screen via touch gestures." | |
| >Using Touch Gestures</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/gestures/detector.html"> | |
| Detecting Common Gestures | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/gestures/movement.html"> | |
| Tracking Movement | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/gestures/scroll.html"> | |
| Animating a Scroll Gesture | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/gestures/multi.html"> | |
| Handling Multi-Touch Gestures | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/gestures/scale.html"> | |
| Dragging and Scaling | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/gestures/viewgroup.html"> | |
| Managing Touch Events in a ViewGroup | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/keyboard-input/index.html" | |
| description= | |
| "How to specify the appearance and behaviors of soft input methods (such | |
| as on-screen keyboards) and how to optimize the experience with | |
| hardware keyboards." | |
| >Handling Keyboard Input</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/keyboard-input/style.html"> | |
| Specifying the Input Method Type | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/keyboard-input/visibility.html"> | |
| Handling Input Method Visibility | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/keyboard-input/navigation.html"> | |
| Supporting Keyboard Navigation | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/keyboard-input/commands.html"> | |
| Handling Keyboard Actions | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/game-controllers/index.html" | |
| description= | |
| "How to write apps that support game controllers." | |
| >Supporting Game Controllers</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/game-controllers/controller-input.html"> | |
| Handling Controller Actions | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/game-controllers/compatibility.html"> | |
| Supporting Controllers Across Android Versions | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/game-controllers/multiple-controllers.html"> | |
| Supporting Multiple Game Controllers | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> <!-- end of User Input --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-background.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| Background Jobs | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/run-background-service/index.html" | |
| description= | |
| "How to improve UI performance and responsiveness by sending work to a | |
| Service running in the background" | |
| >Running in a Background Service</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/run-background-service/create-service.html"> | |
| Creating a Background Service | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/run-background-service/send-request.html"> | |
| Sending Work Requests to the Background Service | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/run-background-service/report-status.html"> | |
| Reporting Work Status | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/load-data-background/index.html" | |
| description="How to use CursorLoader to query data without | |
| affecting UI responsiveness." | |
| >Loading Data in the Background</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/load-data-background/setup-loader.html"> | |
| Running a Query with a CursorLoader</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/load-data-background/handle-results.html"> | |
| Handling the Results</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/scheduling/index.html" | |
| description="How to use repeating alarms and wake locks | |
| to run background jobs." | |
| >Managing Device Awake State</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/scheduling/wakelock.html"> | |
| Keeping the Device Awake</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/scheduling/alarms.html"> | |
| Scheduling Repeating Alarms</a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> <!-- end of Background Jobs --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-performance.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| Performance | |
| </a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/memory.html" | |
| description= | |
| "How to keep your app's memory footprint small in order to improve performance | |
| on a variety of mobile devices." | |
| >Managing Your App's Memory</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/perf-tips.html" | |
| description= | |
| "How to optimize your app's performance in various ways to improve its | |
| responsiveness and battery efficiency." | |
| >Performance Tips</a> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/improving-layouts/index.html" | |
| description= | |
| "How to identify problems in your app's layout performance and improve the UI | |
| responsiveness." | |
| >Improving Layout Performance</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/improving-layouts/optimizing-layout.html"> | |
| Optimizing Layout Hierarchies | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/improving-layouts/reusing-layouts.html"> | |
| Re-using Layouts with <include/> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/improving-layouts/loading-ondemand.html"> | |
| Loading Views On Demand | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/improving-layouts/smooth-scrolling.html"> | |
| Making ListView Scrolling Smooth | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/monitoring-device-state/index.html" | |
| zh-cn-lang="优化电池使用时间" | |
| ja-lang="電池消費量の最適化" | |
| es-lang="Cómo optimizar la duración de la batería" | |
| description= | |
| "How to minimize the amount of power your app requires by adapting to current | |
| power conditions and performing power-hungry tasks at proper intervals." | |
| >Optimizing Battery Life | |
| </a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html" | |
| zh-cn-lang="监控电池电量和充电状态" | |
| ja-lang="電池残量と充電状態の監視" | |
| es-lang="Cómo controlar el nivel de batería y el estado de carga" | |
| >Monitoring the Battery Level and Charging State</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html" | |
| zh-cn-lang="确定和监控基座对接状态和类型" | |
| ja-lang="ホルダーの装着状態とタイプの特定と監視" | |
| es-lang="Cómo determinar y controlar el tipo de conector y el estado de la conexión" | |
| >Determining and Monitoring the Docking State and Type</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html" | |
| zh-cn-lang="确定和监控网络连接状态" | |
| ja-lang="接続状態の特定と監視" | |
| es-lang="Cómo determinar y controlar el estado de la conectividad" | |
| >Determining and Monitoring the Connectivity Status</a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html" | |
| zh-cn-lang="根据需要操作广播接收器" | |
| ja-lang="オンデマンドでのブロードキャスト レシーバ操作" | |
| es-lang="Cómo manipular los receptores de emisión bajo demanda" | |
| >Manipulating Broadcast Receivers On Demand</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/multiple-threads/index.html" | |
| description= | |
| "How to improve the performance and scalability of long-running operations by | |
| dispatching work to multiple threads."> | |
| Sending Operations to Multiple Threads</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/multiple-threads/define-runnable.html"> | |
| Specifying the Code to Run on a Thread | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-threads/create-threadpool.html"> | |
| Creating a Manager for Multiple Threads | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-threads/run-code.html"> | |
| Running Code on a Thread Pool Thread | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-threads/communicate-ui.html"> | |
| Communicating with the UI Thread | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/perf-anr.html" | |
| description= | |
| "How to keep your app responsive to user interaction so the UI does not lock-up and | |
| display an "Application Not Responding" dialog." | |
| >Keeping Your App Responsive</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/perf-jni.html" | |
| description= | |
| "How to efficiently use the Java Native Interface with the Android NDK." | |
| >JNI Tips</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/smp.html" | |
| description= | |
| "Tips for coding Android apps on symmetric multiprocessor systems." | |
| >SMP Primer for Android</a> | |
| </li> | |
| </ul> | |
| </li> <!-- end of Performance --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/best-security.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| Security & Privacy | |
| </a> | |
| </div> | |
| <ul> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/security-tips.html" | |
| description= | |
| "How to perform various tasks and keep your app's data and your user's data secure." | |
| >Security Tips</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/security-ssl.html" | |
| description= | |
| "How to ensure that your app is secure when performing network transactions." | |
| >Security with HTTPS and SSL</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/articles/security-gms-provider.html" | |
| description= | |
| "How to use and update Google Play services security provider, to | |
| protect against SSL exploits." | |
| >Updating Your Security Provider to Protect Against SSL Exploits</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/safetynet/index.html" | |
| description= | |
| "How to use the SafetyNet service to analyze a device where your app is running | |
| and get information about its compatibility with your app." | |
| >Checking Device Compatibility with SafetyNet</a> | |
| </li> | |
| <li> | |
| <a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html" | |
| description="How to create an application that enforces security policies on devices." | |
| >Enhancing Security with Device Management Policies</a> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End security and user info --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/testing.html"> | |
| <span class="small">Best Practices for</span><br/> | |
| Testing | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot ?>training/activity-testing/index.html" | |
| description="How to test Activities in your Android applications."> | |
| Testing Your Activity | |
| </a></div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/activity-testing/preparing-activity-testing.html"> | |
| <span class="en">Setting Up Your Test Environment</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/activity-testing/activity-basic-testing.html"> | |
| <span class="en">Creating and Running a Test Case</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/activity-testing/activity-ui-testing.html"> | |
| <span class="en">Testing UI Components</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/activity-testing/activity-unit-testing.html"> | |
| <span class="en">Creating Unit Tests</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/activity-testing/activity-functional-testing.html"> | |
| <span class="en">Creating Functional Tests</span> | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot ?>training/testing/ui-testing/index.html" | |
| description="How to automate your user interface tests for Android apps."> | |
| Automating UI Tests | |
| </a></div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/testing/ui-testing/espresso-testing.html"> | |
| <span class="en">Testing UI for a Single App</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/testing/ui-testing/uiautomator-testing.html"> | |
| <span class="en">Testing UI for Multiple Apps</span> | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot ?>training/testing/unit-testing/index.html" | |
| description="How to build effective unit tests for Android apps."> | |
| Building Effective Unit Tests | |
| </a></div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/testing/unit-testing/local-unit-tests.html"> | |
| <span class="en">Building Local Unit Tests</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/testing/unit-testing/instrumented-unit-tests.html"> | |
| <span class="en">Building Instrumented Unit Tests</span> | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End best Testing --> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/distribute.html"> | |
| <span class="small">Using Google Play to</span><br/> | |
| Distribute & Monetize | |
| </a> | |
| </div> | |
| <ul> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"><a href="<?cs var:toroot ?>training/in-app-billing/index.html" | |
| description="How to sell in-app products from your application using In-app Billing."> | |
| Selling In-app Products | |
| </a></div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/in-app-billing/preparing-iab-app.html"> | |
| <span class="en">Preparing Your App</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/in-app-billing/list-iab-products.html"> | |
| <span class="en">Establishing Products for Sale</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/in-app-billing/purchase-iab-products.html"> | |
| <span class="en">Purchasing Products</span> | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/in-app-billing/test-iab-app.html"> | |
| <span class="en">Testing Your App</span> | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| <li class="nav-section"> | |
| <div class="nav-section-header"> | |
| <a href="<?cs var:toroot ?>training/multiple-apks/index.html" | |
| description= | |
| "How to publish your app on Google Play with separate APKs that target | |
| different devices, while using a single app listing." | |
| >Maintaining Multiple APKs</a> | |
| </div> | |
| <ul> | |
| <li><a href="<?cs var:toroot ?>training/multiple-apks/api.html"> | |
| Creating Multiple APKs for Different API Levels | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-apks/screensize.html"> | |
| Creating Multiple APKs for Different Screen Sizes | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-apks/texture.html"> | |
| Creating Multiple APKs for Different GL Textures | |
| </a> | |
| </li> | |
| <li><a href="<?cs var:toroot ?>training/multiple-apks/multiple.html"> | |
| Creating Multiple APKs with 2+ Dimensions | |
| </a> | |
| </li> | |
| </ul> | |
| </li> | |
| </ul> | |
| </li> | |
| <!-- End best Publishing --> | |
| </ul><!-- nav --> | |
| <script type="text/javascript"> | |
| <!-- | |
| buildToggleLists(); | |
| changeNavLang(getLangPref()); | |
| //--> | |
| </script> |