├── GLOSSARY.md ├── .gitignore ├── cover.jpg ├── cover ├── logo.png └── background.jpg ├── cover_small.jpg ├── images ├── button.png ├── hello_world.jpg ├── layout-hvga.png ├── lint_icon.png ├── oauth_dance.png ├── layout-listitem.png ├── relativelayout1.png ├── relativelayout2.png ├── button_with_marks.png ├── buttons_stretched.png ├── diagram_backstack.png ├── process_and_thread.jpg ├── service_lifecycle.png ├── camera_features_table.png ├── diagram_multitasking.png ├── hierarchy-layouttimes.png ├── camera-area-coordinates.png ├── dispatchtouchevent_demo.jpg ├── hierarchy-linearlayout.png ├── diagram_multiple_instances.png ├── dispatchtouchevent_process.jpg ├── hierarchy-relativelayout.png ├── service_binding_tree_lifecycle.png └── diagram_backstack_singletask_multiactivity.png ├── android_training.jpg ├── location ├── geofence.png └── index.md ├── material ├── list_mail.png ├── ThemeColors.png ├── card_travel.png ├── ContactsAnim.gif ├── MaterialDark.png ├── MaterialLight.png ├── RecyclerView.png ├── shadows-depth.png ├── SceneTransition.png ├── index.md └── theme.md ├── animations ├── anim_zoom.mp4 ├── anim_zoom.ogv ├── anim_zoom.webm ├── anim_card_flip.mp4 ├── anim_card_flip.ogv ├── anim_crossfade.mp4 ├── anim_crossfade.ogv ├── anim_card_flip.webm ├── anim_crossfade.webm ├── anim_screenslide.mp4 ├── anim_screenslide.ogv ├── anim_screenslide.webm ├── anim_layout_changes.mp4 ├── anim_layout_changes.ogv ├── anim_layout_changes.webm ├── anim_page_transformer_depth.mp4 ├── anim_page_transformer_depth.ogv ├── anim_page_transformer_depth.webm ├── anim_page_transformer_zoomout.mp4 ├── anim_page_transformer_zoomout.ogv ├── anim_page_transformer_zoomout.webm ├── device_galaxynexus_blank_land_span8.png ├── index.md └── layout.md ├── basics ├── firstapp │ ├── as-run.png │ ├── firstapp.png │ ├── viewgroup.png │ ├── as-hide-side.png │ ├── avd_manager.png │ ├── avds-config.png │ ├── eclipse-new.png │ ├── eclipse-run.png │ ├── toolbar-run.png │ ├── add-string_2x.png │ ├── edittext_wrap.png │ ├── pick-resource.png │ ├── studio-setup-1.png │ ├── window-project.png │ ├── adt-new-activity.png │ ├── edittext_gravity.png │ ├── layout-editor_2x.png │ ├── window-properties.png │ ├── add-sign-green-icon.png │ ├── adt-firstapp-setup.png │ ├── avd-manager-studio.png │ ├── constraint-chain_2x.png │ ├── layout-width-match.png │ ├── studio-new-activity.png │ ├── constraint-button_2x.png │ ├── constraint-centered_2x.png │ ├── constraint-example_2x.png │ ├── constraint-textbox_2x.png │ ├── constraint-textview_2x.png │ ├── layout-editor-design.png │ ├── layout-editor-device.png │ ├── layout-editor-margin.png │ ├── properties-margin_2x.png │ ├── screenshot-activity2.png │ ├── toolbar-apply-changes.png │ ├── layout-editor-blueprint.png │ ├── studio-avdmgr-firstscreen.png │ ├── layout-editor-action-baseline.png │ ├── layout-editor-autoconnect-on.png │ ├── layout-editor-hide-constraints.png │ └── index.md ├── actionbar │ ├── actionbar-up.png │ ├── actionbar-basic.png │ ├── actionbar-actions.png │ ├── actionbar-overlay@2x.png │ ├── actionbar-theme-dark@2x.png │ ├── actionbar-theme-custom@2x.png │ ├── actionbar-theme-custom-tabs@2x.png │ ├── actionbar-theme-light-solid@2x.png │ ├── actionbar-theme-light-darkactionbar@2x.png │ └── index.md ├── intents │ ├── intent-chooser.png │ ├── intents-choice.png │ └── index.md ├── fragments │ ├── fragments-screen-mock.png │ └── index.md ├── activity-lifecycle │ ├── basic-lifecycle.png │ ├── basic-lifecycle-create.png │ ├── basic-lifecycle-paused.png │ ├── basic-lifecycle-stopped.png │ ├── basic-lifecycle-savestate.png │ └── index.md ├── data-storage │ └── index.md ├── permissions │ ├── declaring.md │ └── index.md ├── supporting-devices │ └── index.md └── index.md ├── gitbook ├── images │ └── favicon.ico ├── fonts │ ├── opensans │ │ ├── 300.woff │ │ ├── 300i.woff │ │ ├── 400.woff │ │ ├── 400i.woff │ │ ├── 600.woff │ │ ├── 600i.woff │ │ ├── 700.woff │ │ └── 700i.woff │ ├── merriweather │ │ ├── 250.woff │ │ ├── 250i.woff │ │ ├── 400.woff │ │ ├── 400i.woff │ │ ├── 700.woff │ │ ├── 700i.woff │ │ ├── 900.woff │ │ └── 900i.woff │ └── fontawesome │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff ├── jsrepl │ ├── sandbox.html │ └── langs │ │ └── javascript │ │ └── jsrepl_js.js ├── plugins │ ├── gitbook-plugin-mathjax │ │ └── plugin.js │ └── gitbook-plugin-disqus │ │ └── plugin.js └── print.css ├── tv ├── discovery │ ├── deep-link.png │ ├── home-recommendations.png │ └── index.md ├── playback │ ├── app-browse.png │ ├── card-view.png │ └── index.md ├── tif │ ├── tv-tif-overview.png │ └── index.md ├── games │ └── game-controller-buttons_2x.png └── start │ └── index.md ├── ui ├── multiscreen │ ├── button.png │ ├── layout-hvga.png │ ├── relativelayout1.png │ ├── relativelayout2.png │ ├── button_with_marks.png │ ├── buttons_stretched.png │ ├── index.md │ └── screen-desities.md ├── system-ui │ ├── imm-states.png │ ├── imm-sticky.png │ ├── system-ui.png │ ├── navigation-bar.png │ ├── status_bar_hide.png │ ├── status_bar_show.png │ ├── low_profile_hide2x.png │ ├── low_profile_show2x.png │ ├── index.md │ ├── visibility.md │ ├── dim.md │ └── hide-nav.md ├── backward-compatible-ui │ ├── backward-compatible-ui-gb.png │ ├── backward-compatible-ui-ics.png │ ├── backward-compatible-ui-classes.png │ ├── backward-compatible-ui-classes-eclair.png │ ├── backward-compatible-ui-classes-honeycomb.png │ └── index.md ├── accessibility │ └── index.md └── custom-view │ └── index.md ├── wearables ├── ui │ ├── 01_uilib.png │ ├── 02_uilib.png │ ├── 03_uilib.png │ ├── 04_uilib.png │ ├── 05_uilib.png │ ├── 06_uilib.png │ ├── 07_uilib.png │ ├── 08_uilib.png │ ├── 09_uilib.png │ └── index.md ├── apps │ ├── voice_intent_1.png │ ├── voice_intent_2.png │ ├── voice_intent_3.png │ ├── bt-debugging.md │ └── index.md ├── notifications │ ├── 06_images.png │ ├── 08_pages.png │ ├── 09_pages.png │ ├── 03_actions.png │ ├── 11_bundles_A.png │ ├── 11_bundles_B.png │ ├── 12_voicereply.png │ ├── 13_voicereply.png │ ├── circle_email_action.png │ ├── notif_summary_framed.png │ ├── notification_phone@2x.png │ ├── index.md │ └── pages.md ├── watch-faces │ ├── Render_Next.png │ ├── AnalogNoCard.png │ ├── ClockHandFull.png │ ├── Render_Saturn.png │ ├── AnalogWithCard.png │ ├── ClockHandCropped.png │ ├── Render_Episode.png │ ├── preview_analog.png │ ├── preview_calendar.png │ ├── preview_digital.png │ ├── Indicators_Cropped.png │ ├── Render_Interactive.png │ ├── BitmapFilterDisabled.png │ ├── BitmapFilterEnabled.png │ ├── index.md │ ├── designing.md │ └── issues.md └── data-layer │ └── wear_cloud_node.png ├── enterprise ├── work-launcher.png ├── app_restrictions_diagram.png ├── pinning_vs_locktaskmode.png └── index.md ├── performance ├── perf-anr │ └── anr.png ├── improving-layouts │ ├── layout-listitem.png │ ├── hierarchy-layouttimes.png │ ├── hierarchy-linearlayout.png │ ├── hierarchy-relativelayout.png │ ├── studio-inspections-config.png │ ├── index.md │ ├── loading-ondemand.md │ └── smooth-scrolling.md ├── monitor-device-state │ ├── index.md │ ├── manifest-receivers.md │ ├── connectivity-monitor.md │ └── docking-monitor.md └── multi-threads │ └── index.md ├── graphics ├── opengl │ ├── ccw-square.png │ ├── ccw-winding.png │ ├── coordinates.png │ ├── ogl-triangle.png │ ├── ogl-triangle-touch.png │ ├── ogl-triangle-projected.png │ ├── index.md │ └── motion.md └── displaying-bitmaps │ └── index.md ├── input ├── keyboard-input │ ├── ime_password.png │ ├── edittext-phone.png │ ├── ime_autocorrect.png │ ├── edittext-actionsend.png │ └── index.md ├── game-controller │ ├── game-controller-profiles.png │ ├── backward-compatible-inputmanager.png │ └── index.md └── gestures │ └── index.md ├── ux ├── notify-user │ ├── activity_indicator.png │ ├── progress_bar_summary.png │ ├── notifications-bigview.png │ ├── notifications-normalview.png │ ├── index.md │ └── update-notification.md ├── implement-nav │ ├── implementing-navigation-up.png │ └── index.md ├── design-nav │ ├── app-navigation-screen-planning-erd.png │ ├── app-navigation-ancestral-navigate-up.png │ ├── app-navigation-ancestral-navigate-back.png │ ├── app-navigation-descendant-lateral-desc.png │ ├── app-navigation-descendant-lateral-lists.png │ ├── app-navigation-descendant-lateral-tabs.png │ ├── app-navigation-wireframing-wires-phone.png │ ├── app-navigation-wireframing-wires-tablet.png │ ├── app-navigation-descendant-lateral-buttons.png │ ├── app-navigation-descendant-lateral-paging.png │ ├── app-navigation-descendant-lateral-children.png │ ├── app-navigation-multiple-sizes-multipane-bad.png │ ├── app-navigation-multiple-sizes-multipane-good.png │ ├── app-navigation-multiple-sizes-strategy-stack.png │ ├── app-navigation-wireframing-map-example-phone.png │ ├── app-navigation-multiple-sizes-strategy-stretch.png │ ├── app-navigation-screen-planning-exhaustive-map.png │ ├── app-navigation-wireframing-map-example-tablet.png │ ├── app-navigation-multiple-sizes-strategy-collapse.png │ ├── app-navigation-multiple-sizes-strategy-show-hide.png │ ├── app-navigation-wireframing-map-example-tablet-alt.png │ ├── app-navigation-descendant-lateral-paging-companion.png │ ├── app-navigation-multiple-sizes-multipane-screen-map.png │ ├── index.md │ ├── screen-planning.md │ └── ancestral-temporal.md ├── search │ ├── index.md │ └── back-compat.md └── app-indexing │ └── index.md ├── connectivity ├── volley │ ├── volley-request.png │ └── index.md ├── efficient-downloads │ ├── DDMS.png │ ├── graphs.png │ ├── mobile_radio_state_machine.png │ ├── index.md │ ├── connectivity-patterns.md │ └── redundant-redundant.md ├── network-ops │ ├── network-settings1.png │ ├── network-settings2.png │ └── index.md ├── cloudsync │ └── index.md ├── connect-devices-wireless │ └── index.md └── sync-adapters │ └── index.md ├── security └── device-mgmt-activate-device-admin.png ├── content-sharing ├── sharing │ ├── actionbar-shareaction.png │ ├── share-text-screenshot.png │ ├── index.md │ └── shareaction.md ├── beam-files │ └── index.md └── secure-file-sharing │ └── index.md ├── package.json ├── book.json ├── best-testing.md ├── config.json ├── best-user-input.md ├── best-background.md ├── best-security.md ├── background-jobs ├── scheduling │ └── index.md ├── run-background-service │ ├── index.md │ ├── send-request.md │ └── create-service.md └── load-data-background │ └── index.md ├── multimedia ├── printing │ ├── index.md │ └── photos.md ├── camera │ └── index.md └── audio │ ├── index.md │ └── audio-output.md ├── best-performance.md ├── testing └── activity-testing │ ├── index.md │ └── prepare-activity-testing.md ├── contacts-provider └── index.md ├── manifest.appcache ├── best-ux.md ├── best-ui.md └── permissions └── DeclaringPermissions.md /GLOSSARY.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/cover.jpg -------------------------------------------------------------------------------- /cover/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/cover/logo.png -------------------------------------------------------------------------------- /cover_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/cover_small.jpg -------------------------------------------------------------------------------- /images/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/button.png -------------------------------------------------------------------------------- /android_training.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/android_training.jpg -------------------------------------------------------------------------------- /cover/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/cover/background.jpg -------------------------------------------------------------------------------- /images/hello_world.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/hello_world.jpg -------------------------------------------------------------------------------- /images/layout-hvga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/layout-hvga.png -------------------------------------------------------------------------------- /images/lint_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/lint_icon.png -------------------------------------------------------------------------------- /images/oauth_dance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/oauth_dance.png -------------------------------------------------------------------------------- /location/geofence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/location/geofence.png -------------------------------------------------------------------------------- /material/list_mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/list_mail.png -------------------------------------------------------------------------------- /animations/anim_zoom.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_zoom.mp4 -------------------------------------------------------------------------------- /animations/anim_zoom.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_zoom.ogv -------------------------------------------------------------------------------- /material/ThemeColors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/ThemeColors.png -------------------------------------------------------------------------------- /material/card_travel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/card_travel.png -------------------------------------------------------------------------------- /animations/anim_zoom.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_zoom.webm -------------------------------------------------------------------------------- /basics/firstapp/as-run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/as-run.png -------------------------------------------------------------------------------- /gitbook/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/images/favicon.ico -------------------------------------------------------------------------------- /images/layout-listitem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/layout-listitem.png -------------------------------------------------------------------------------- /images/relativelayout1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/relativelayout1.png -------------------------------------------------------------------------------- /images/relativelayout2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/relativelayout2.png -------------------------------------------------------------------------------- /material/ContactsAnim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/ContactsAnim.gif -------------------------------------------------------------------------------- /material/MaterialDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/MaterialDark.png -------------------------------------------------------------------------------- /material/MaterialLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/MaterialLight.png -------------------------------------------------------------------------------- /material/RecyclerView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/RecyclerView.png -------------------------------------------------------------------------------- /material/shadows-depth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/shadows-depth.png -------------------------------------------------------------------------------- /tv/discovery/deep-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/discovery/deep-link.png -------------------------------------------------------------------------------- /tv/playback/app-browse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/playback/app-browse.png -------------------------------------------------------------------------------- /tv/playback/card-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/playback/card-view.png -------------------------------------------------------------------------------- /tv/tif/tv-tif-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/tif/tv-tif-overview.png -------------------------------------------------------------------------------- /ui/multiscreen/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/button.png -------------------------------------------------------------------------------- /ui/system-ui/imm-states.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/imm-states.png -------------------------------------------------------------------------------- /ui/system-ui/imm-sticky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/imm-sticky.png -------------------------------------------------------------------------------- /ui/system-ui/system-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/system-ui.png -------------------------------------------------------------------------------- /wearables/ui/01_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/01_uilib.png -------------------------------------------------------------------------------- /wearables/ui/02_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/02_uilib.png -------------------------------------------------------------------------------- /wearables/ui/03_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/03_uilib.png -------------------------------------------------------------------------------- /wearables/ui/04_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/04_uilib.png -------------------------------------------------------------------------------- /wearables/ui/05_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/05_uilib.png -------------------------------------------------------------------------------- /wearables/ui/06_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/06_uilib.png -------------------------------------------------------------------------------- /wearables/ui/07_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/07_uilib.png -------------------------------------------------------------------------------- /wearables/ui/08_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/08_uilib.png -------------------------------------------------------------------------------- /wearables/ui/09_uilib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/ui/09_uilib.png -------------------------------------------------------------------------------- /animations/anim_card_flip.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_card_flip.mp4 -------------------------------------------------------------------------------- /animations/anim_card_flip.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_card_flip.ogv -------------------------------------------------------------------------------- /animations/anim_crossfade.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_crossfade.mp4 -------------------------------------------------------------------------------- /animations/anim_crossfade.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_crossfade.ogv -------------------------------------------------------------------------------- /basics/firstapp/firstapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/firstapp.png -------------------------------------------------------------------------------- /basics/firstapp/viewgroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/viewgroup.png -------------------------------------------------------------------------------- /enterprise/work-launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/enterprise/work-launcher.png -------------------------------------------------------------------------------- /images/button_with_marks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/button_with_marks.png -------------------------------------------------------------------------------- /images/buttons_stretched.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/buttons_stretched.png -------------------------------------------------------------------------------- /images/diagram_backstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/diagram_backstack.png -------------------------------------------------------------------------------- /images/process_and_thread.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/process_and_thread.jpg -------------------------------------------------------------------------------- /images/service_lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/service_lifecycle.png -------------------------------------------------------------------------------- /material/SceneTransition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/material/SceneTransition.png -------------------------------------------------------------------------------- /performance/perf-anr/anr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/perf-anr/anr.png -------------------------------------------------------------------------------- /animations/anim_card_flip.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_card_flip.webm -------------------------------------------------------------------------------- /animations/anim_crossfade.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_crossfade.webm -------------------------------------------------------------------------------- /animations/anim_screenslide.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_screenslide.mp4 -------------------------------------------------------------------------------- /animations/anim_screenslide.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_screenslide.ogv -------------------------------------------------------------------------------- /animations/anim_screenslide.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_screenslide.webm -------------------------------------------------------------------------------- /basics/firstapp/as-hide-side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/as-hide-side.png -------------------------------------------------------------------------------- /basics/firstapp/avd_manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/avd_manager.png -------------------------------------------------------------------------------- /basics/firstapp/avds-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/avds-config.png -------------------------------------------------------------------------------- /basics/firstapp/eclipse-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/eclipse-new.png -------------------------------------------------------------------------------- /basics/firstapp/eclipse-run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/eclipse-run.png -------------------------------------------------------------------------------- /basics/firstapp/toolbar-run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/toolbar-run.png -------------------------------------------------------------------------------- /gitbook/fonts/opensans/300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/300.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/300i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/300i.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/400.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/400i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/400i.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/600.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/600i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/600i.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/700.woff -------------------------------------------------------------------------------- /gitbook/fonts/opensans/700i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/opensans/700i.woff -------------------------------------------------------------------------------- /graphics/opengl/ccw-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/ccw-square.png -------------------------------------------------------------------------------- /graphics/opengl/ccw-winding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/ccw-winding.png -------------------------------------------------------------------------------- /graphics/opengl/coordinates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/coordinates.png -------------------------------------------------------------------------------- /graphics/opengl/ogl-triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/ogl-triangle.png -------------------------------------------------------------------------------- /images/camera_features_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/camera_features_table.png -------------------------------------------------------------------------------- /images/diagram_multitasking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/diagram_multitasking.png -------------------------------------------------------------------------------- /images/hierarchy-layouttimes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/hierarchy-layouttimes.png -------------------------------------------------------------------------------- /ui/multiscreen/layout-hvga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/layout-hvga.png -------------------------------------------------------------------------------- /ui/system-ui/navigation-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/navigation-bar.png -------------------------------------------------------------------------------- /ui/system-ui/status_bar_hide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/status_bar_hide.png -------------------------------------------------------------------------------- /ui/system-ui/status_bar_show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/status_bar_show.png -------------------------------------------------------------------------------- /animations/anim_layout_changes.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_layout_changes.mp4 -------------------------------------------------------------------------------- /animations/anim_layout_changes.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_layout_changes.ogv -------------------------------------------------------------------------------- /basics/actionbar/actionbar-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-up.png -------------------------------------------------------------------------------- /basics/firstapp/add-string_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/add-string_2x.png -------------------------------------------------------------------------------- /basics/firstapp/edittext_wrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/edittext_wrap.png -------------------------------------------------------------------------------- /basics/firstapp/pick-resource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/pick-resource.png -------------------------------------------------------------------------------- /basics/firstapp/studio-setup-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/studio-setup-1.png -------------------------------------------------------------------------------- /basics/firstapp/window-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/window-project.png -------------------------------------------------------------------------------- /basics/intents/intent-chooser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/intents/intent-chooser.png -------------------------------------------------------------------------------- /basics/intents/intents-choice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/intents/intents-choice.png -------------------------------------------------------------------------------- /images/camera-area-coordinates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/camera-area-coordinates.png -------------------------------------------------------------------------------- /images/dispatchtouchevent_demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/dispatchtouchevent_demo.jpg -------------------------------------------------------------------------------- /images/hierarchy-linearlayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/hierarchy-linearlayout.png -------------------------------------------------------------------------------- /ui/multiscreen/relativelayout1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/relativelayout1.png -------------------------------------------------------------------------------- /ui/multiscreen/relativelayout2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/relativelayout2.png -------------------------------------------------------------------------------- /wearables/apps/voice_intent_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/apps/voice_intent_1.png -------------------------------------------------------------------------------- /wearables/apps/voice_intent_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/apps/voice_intent_2.png -------------------------------------------------------------------------------- /wearables/apps/voice_intent_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/apps/voice_intent_3.png -------------------------------------------------------------------------------- /animations/anim_layout_changes.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_layout_changes.webm -------------------------------------------------------------------------------- /basics/actionbar/actionbar-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-basic.png -------------------------------------------------------------------------------- /basics/firstapp/adt-new-activity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/adt-new-activity.png -------------------------------------------------------------------------------- /basics/firstapp/edittext_gravity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/edittext_gravity.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor_2x.png -------------------------------------------------------------------------------- /basics/firstapp/window-properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/window-properties.png -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/250.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/250.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/250i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/250i.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/400.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/400i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/400i.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/700.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/700i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/700i.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/900.woff -------------------------------------------------------------------------------- /gitbook/fonts/merriweather/900i.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/merriweather/900i.woff -------------------------------------------------------------------------------- /images/diagram_multiple_instances.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/diagram_multiple_instances.png -------------------------------------------------------------------------------- /images/dispatchtouchevent_process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/dispatchtouchevent_process.jpg -------------------------------------------------------------------------------- /images/hierarchy-relativelayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/hierarchy-relativelayout.png -------------------------------------------------------------------------------- /input/keyboard-input/ime_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/keyboard-input/ime_password.png -------------------------------------------------------------------------------- /tv/discovery/home-recommendations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/discovery/home-recommendations.png -------------------------------------------------------------------------------- /ui/multiscreen/button_with_marks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/button_with_marks.png -------------------------------------------------------------------------------- /ui/multiscreen/buttons_stretched.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/multiscreen/buttons_stretched.png -------------------------------------------------------------------------------- /ui/system-ui/low_profile_hide2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/low_profile_hide2x.png -------------------------------------------------------------------------------- /ui/system-ui/low_profile_show2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/system-ui/low_profile_show2x.png -------------------------------------------------------------------------------- /ux/notify-user/activity_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/notify-user/activity_indicator.png -------------------------------------------------------------------------------- /wearables/notifications/06_images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/06_images.png -------------------------------------------------------------------------------- /wearables/notifications/08_pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/08_pages.png -------------------------------------------------------------------------------- /wearables/notifications/09_pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/09_pages.png -------------------------------------------------------------------------------- /wearables/watch-faces/Render_Next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/Render_Next.png -------------------------------------------------------------------------------- /basics/actionbar/actionbar-actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-actions.png -------------------------------------------------------------------------------- /basics/firstapp/add-sign-green-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/add-sign-green-icon.png -------------------------------------------------------------------------------- /basics/firstapp/adt-firstapp-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/adt-firstapp-setup.png -------------------------------------------------------------------------------- /basics/firstapp/avd-manager-studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/avd-manager-studio.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-chain_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-chain_2x.png -------------------------------------------------------------------------------- /basics/firstapp/layout-width-match.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-width-match.png -------------------------------------------------------------------------------- /basics/firstapp/studio-new-activity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/studio-new-activity.png -------------------------------------------------------------------------------- /connectivity/volley/volley-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/volley/volley-request.png -------------------------------------------------------------------------------- /enterprise/app_restrictions_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/enterprise/app_restrictions_diagram.png -------------------------------------------------------------------------------- /enterprise/pinning_vs_locktaskmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/enterprise/pinning_vs_locktaskmode.png -------------------------------------------------------------------------------- /graphics/opengl/ogl-triangle-touch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/ogl-triangle-touch.png -------------------------------------------------------------------------------- /input/keyboard-input/edittext-phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/keyboard-input/edittext-phone.png -------------------------------------------------------------------------------- /tv/games/game-controller-buttons_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/tv/games/game-controller-buttons_2x.png -------------------------------------------------------------------------------- /ux/notify-user/progress_bar_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/notify-user/progress_bar_summary.png -------------------------------------------------------------------------------- /wearables/notifications/03_actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/03_actions.png -------------------------------------------------------------------------------- /wearables/watch-faces/AnalogNoCard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/AnalogNoCard.png -------------------------------------------------------------------------------- /wearables/watch-faces/ClockHandFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/ClockHandFull.png -------------------------------------------------------------------------------- /wearables/watch-faces/Render_Saturn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/Render_Saturn.png -------------------------------------------------------------------------------- /animations/anim_page_transformer_depth.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_depth.mp4 -------------------------------------------------------------------------------- /animations/anim_page_transformer_depth.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_depth.ogv -------------------------------------------------------------------------------- /basics/actionbar/actionbar-overlay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-overlay@2x.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-button_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-button_2x.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-centered_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-centered_2x.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-example_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-example_2x.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-textbox_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-textbox_2x.png -------------------------------------------------------------------------------- /basics/firstapp/constraint-textview_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/constraint-textview_2x.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-design.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-device.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-margin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-margin.png -------------------------------------------------------------------------------- /basics/firstapp/properties-margin_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/properties-margin_2x.png -------------------------------------------------------------------------------- /basics/firstapp/screenshot-activity2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/screenshot-activity2.png -------------------------------------------------------------------------------- /basics/firstapp/toolbar-apply-changes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/toolbar-apply-changes.png -------------------------------------------------------------------------------- /basics/fragments/fragments-screen-mock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/fragments/fragments-screen-mock.png -------------------------------------------------------------------------------- /connectivity/efficient-downloads/DDMS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/efficient-downloads/DDMS.png -------------------------------------------------------------------------------- /gitbook/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /graphics/opengl/ogl-triangle-projected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/graphics/opengl/ogl-triangle-projected.png -------------------------------------------------------------------------------- /images/service_binding_tree_lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/service_binding_tree_lifecycle.png -------------------------------------------------------------------------------- /input/keyboard-input/ime_autocorrect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/keyboard-input/ime_autocorrect.png -------------------------------------------------------------------------------- /ux/notify-user/notifications-bigview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/notify-user/notifications-bigview.png -------------------------------------------------------------------------------- /wearables/data-layer/wear_cloud_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/data-layer/wear_cloud_node.png -------------------------------------------------------------------------------- /wearables/notifications/11_bundles_A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/11_bundles_A.png -------------------------------------------------------------------------------- /wearables/notifications/11_bundles_B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/11_bundles_B.png -------------------------------------------------------------------------------- /wearables/notifications/12_voicereply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/12_voicereply.png -------------------------------------------------------------------------------- /wearables/notifications/13_voicereply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/13_voicereply.png -------------------------------------------------------------------------------- /wearables/watch-faces/AnalogWithCard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/AnalogWithCard.png -------------------------------------------------------------------------------- /wearables/watch-faces/ClockHandCropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/ClockHandCropped.png -------------------------------------------------------------------------------- /wearables/watch-faces/Render_Episode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/Render_Episode.png -------------------------------------------------------------------------------- /wearables/watch-faces/preview_analog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/preview_analog.png -------------------------------------------------------------------------------- /wearables/watch-faces/preview_calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/preview_calendar.png -------------------------------------------------------------------------------- /wearables/watch-faces/preview_digital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/preview_digital.png -------------------------------------------------------------------------------- /animations/anim_page_transformer_depth.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_depth.webm -------------------------------------------------------------------------------- /animations/anim_page_transformer_zoomout.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_zoomout.mp4 -------------------------------------------------------------------------------- /animations/anim_page_transformer_zoomout.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_zoomout.ogv -------------------------------------------------------------------------------- /basics/actionbar/actionbar-theme-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-theme-dark@2x.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-blueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-blueprint.png -------------------------------------------------------------------------------- /connectivity/efficient-downloads/graphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/efficient-downloads/graphs.png -------------------------------------------------------------------------------- /input/keyboard-input/edittext-actionsend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/keyboard-input/edittext-actionsend.png -------------------------------------------------------------------------------- /ux/notify-user/notifications-normalview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/notify-user/notifications-normalview.png -------------------------------------------------------------------------------- /wearables/watch-faces/Indicators_Cropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/Indicators_Cropped.png -------------------------------------------------------------------------------- /wearables/watch-faces/Render_Interactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/Render_Interactive.png -------------------------------------------------------------------------------- /animations/anim_page_transformer_zoomout.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/anim_page_transformer_zoomout.webm -------------------------------------------------------------------------------- /basics/actionbar/actionbar-theme-custom@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-theme-custom@2x.png -------------------------------------------------------------------------------- /basics/activity-lifecycle/basic-lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/activity-lifecycle/basic-lifecycle.png -------------------------------------------------------------------------------- /basics/firstapp/studio-avdmgr-firstscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/studio-avdmgr-firstscreen.png -------------------------------------------------------------------------------- /connectivity/network-ops/network-settings1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/network-ops/network-settings1.png -------------------------------------------------------------------------------- /connectivity/network-ops/network-settings2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/network-ops/network-settings2.png -------------------------------------------------------------------------------- /security/device-mgmt-activate-device-admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/security/device-mgmt-activate-device-admin.png -------------------------------------------------------------------------------- /ux/implement-nav/implementing-navigation-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/implement-nav/implementing-navigation-up.png -------------------------------------------------------------------------------- /wearables/notifications/circle_email_action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/circle_email_action.png -------------------------------------------------------------------------------- /wearables/watch-faces/BitmapFilterDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/BitmapFilterDisabled.png -------------------------------------------------------------------------------- /wearables/watch-faces/BitmapFilterEnabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/watch-faces/BitmapFilterEnabled.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-action-baseline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-action-baseline.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-autoconnect-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-autoconnect-on.png -------------------------------------------------------------------------------- /content-sharing/sharing/actionbar-shareaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/content-sharing/sharing/actionbar-shareaction.png -------------------------------------------------------------------------------- /content-sharing/sharing/share-text-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/content-sharing/sharing/share-text-screenshot.png -------------------------------------------------------------------------------- /gitbook/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /gitbook/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /performance/improving-layouts/layout-listitem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/improving-layouts/layout-listitem.png -------------------------------------------------------------------------------- /wearables/notifications/notif_summary_framed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/notif_summary_framed.png -------------------------------------------------------------------------------- /wearables/notifications/notification_phone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/wearables/notifications/notification_phone@2x.png -------------------------------------------------------------------------------- /animations/device_galaxynexus_blank_land_span8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/animations/device_galaxynexus_blank_land_span8.png -------------------------------------------------------------------------------- /basics/actionbar/actionbar-theme-custom-tabs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-theme-custom-tabs@2x.png -------------------------------------------------------------------------------- /basics/actionbar/actionbar-theme-light-solid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-theme-light-solid@2x.png -------------------------------------------------------------------------------- /basics/activity-lifecycle/basic-lifecycle-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/activity-lifecycle/basic-lifecycle-create.png -------------------------------------------------------------------------------- /basics/activity-lifecycle/basic-lifecycle-paused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/activity-lifecycle/basic-lifecycle-paused.png -------------------------------------------------------------------------------- /basics/firstapp/layout-editor-hide-constraints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/firstapp/layout-editor-hide-constraints.png -------------------------------------------------------------------------------- /gitbook/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/gitbook/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /input/game-controller/game-controller-profiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/game-controller/game-controller-profiles.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-screen-planning-erd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-screen-planning-erd.png -------------------------------------------------------------------------------- /basics/activity-lifecycle/basic-lifecycle-stopped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/activity-lifecycle/basic-lifecycle-stopped.png -------------------------------------------------------------------------------- /images/diagram_backstack_singletask_multiactivity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/images/diagram_backstack_singletask_multiactivity.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "book", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "gitbook-plugin-disqus": "*", 6 | "gitbook-plugin-ga": "*" 7 | } 8 | } -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-ancestral-navigate-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-ancestral-navigate-up.png -------------------------------------------------------------------------------- /basics/activity-lifecycle/basic-lifecycle-savestate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/activity-lifecycle/basic-lifecycle-savestate.png -------------------------------------------------------------------------------- /performance/improving-layouts/hierarchy-layouttimes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/improving-layouts/hierarchy-layouttimes.png -------------------------------------------------------------------------------- /performance/improving-layouts/hierarchy-linearlayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/improving-layouts/hierarchy-linearlayout.png -------------------------------------------------------------------------------- /ui/backward-compatible-ui/backward-compatible-ui-gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/backward-compatible-ui/backward-compatible-ui-gb.png -------------------------------------------------------------------------------- /ui/backward-compatible-ui/backward-compatible-ui-ics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/backward-compatible-ui/backward-compatible-ui-ics.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-ancestral-navigate-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-ancestral-navigate-back.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-desc.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-lists.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-tabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-tabs.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-wireframing-wires-phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-wireframing-wires-phone.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-wireframing-wires-tablet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-wireframing-wires-tablet.png -------------------------------------------------------------------------------- /basics/actionbar/actionbar-theme-light-darkactionbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/basics/actionbar/actionbar-theme-light-darkactionbar@2x.png -------------------------------------------------------------------------------- /input/game-controller/backward-compatible-inputmanager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/input/game-controller/backward-compatible-inputmanager.png -------------------------------------------------------------------------------- /performance/improving-layouts/hierarchy-relativelayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/improving-layouts/hierarchy-relativelayout.png -------------------------------------------------------------------------------- /performance/improving-layouts/studio-inspections-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/performance/improving-layouts/studio-inspections-config.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-buttons.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-paging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-paging.png -------------------------------------------------------------------------------- /ui/backward-compatible-ui/backward-compatible-ui-classes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/backward-compatible-ui/backward-compatible-ui-classes.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-children.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-children.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-multipane-bad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-multipane-bad.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-multipane-good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-multipane-good.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-strategy-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-strategy-stack.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-wireframing-map-example-phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-wireframing-map-example-phone.png -------------------------------------------------------------------------------- /connectivity/efficient-downloads/mobile_radio_state_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/connectivity/efficient-downloads/mobile_radio_state_machine.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-strategy-stretch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-strategy-stretch.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-screen-planning-exhaustive-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-screen-planning-exhaustive-map.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-wireframing-map-example-tablet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-wireframing-map-example-tablet.png -------------------------------------------------------------------------------- /ui/backward-compatible-ui/backward-compatible-ui-classes-eclair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/backward-compatible-ui/backward-compatible-ui-classes-eclair.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-strategy-collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-strategy-collapse.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-strategy-show-hide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-strategy-show-hide.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-wireframing-map-example-tablet-alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-wireframing-map-example-tablet-alt.png -------------------------------------------------------------------------------- /gitbook/jsrepl/sandbox.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jsREPL Sandbox 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-descendant-lateral-paging-companion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-descendant-lateral-paging-companion.png -------------------------------------------------------------------------------- /ux/design-nav/app-navigation-multiple-sizes-multipane-screen-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ux/design-nav/app-navigation-multiple-sizes-multipane-screen-map.png -------------------------------------------------------------------------------- /ui/backward-compatible-ui/backward-compatible-ui-classes-honeycomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kesenhoo/android-training-course-in-chinese/HEAD/ui/backward-compatible-ui/backward-compatible-ui-classes-honeycomb.png -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "disqus", 4 | "ga" 5 | ], 6 | "pluginsConfig": { 7 | "disqus": { 8 | "shortName": "kesenhoo" 9 | }, 10 | "ga": { 11 | "token": "UA-37679268-1" 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /best-testing.md: -------------------------------------------------------------------------------- 1 | # 测试程序 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | These classes and articles provide information about how to test your Android application. 6 | 7 | #### [Testing Your Activity](testing/activity-testing/index.html) 8 | How to test Activities in your Android applications. 9 | -------------------------------------------------------------------------------- /gitbook/plugins/gitbook-plugin-mathjax/plugin.js: -------------------------------------------------------------------------------- 1 | require(["gitbook"], function(gitbook) { 2 | MathJax.Hub.Config({ 3 | tex2jax: { 4 | inlineMath: [['$','$'], ['\\(','\\)']], 5 | processEscapes: true 6 | } 7 | }); 8 | 9 | 10 | gitbook.events.bind("page.change", function() { 11 | MathJax.Hub.Typeset() 12 | }); 13 | }); -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Android官方培训课程", 3 | "introduction": "Android官方培训课程:http://developer.android.com/training/index.html 中文版,开源协同项目:https://github.com/kesenhoo/android-training-course-in-chinese", 4 | "title": "Android官方培训课程(中文版)", 5 | "keywords": "Android Training Google", 6 | "description": "Android官方培训课程(中文版)", 7 | "path": { 8 | "toc": "SUMMARY.md" 9 | } 10 | } -------------------------------------------------------------------------------- /best-user-input.md: -------------------------------------------------------------------------------- 1 | # 用户输入 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文:http://developer.android.com/training/best-user-input.html 4 | 5 | 本课程涵盖的主题包括多种多样用户输入,例如触摸屏幕手势、通过屏幕输入法和硬件键盘的文本输入。 6 | 7 | #### [使用触摸手势](input/gestures/index.html) 8 | 9 | 介绍如何编写允许用户通过触摸手势与触摸屏幕进行交互的app程序。 10 | 11 | #### [处理键盘输入事件](input/keyboard-input/index.html) 12 | 13 | 介绍在软输入方法下(如屏幕键盘按键情况下)程序的响应表现和执行动作,以及如何优化在硬件键盘按键下的用户体验。 14 | 15 | #### [兼容游戏控制器](input/game-controller/index.html) 16 | 17 | 介绍如何编写支持游戏控制器的app。 18 | -------------------------------------------------------------------------------- /best-background.md: -------------------------------------------------------------------------------- 1 | # Android后台任务 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 下面的这些课程会教我们如何通过把任务执行在后台线程来提升程序的性能,还会教我们如何最小化后台线程对电量的消耗。 6 | 7 | #### [在后台Service中执行任务](background-jobs/run-background-service/index.html) 8 | 学习如何通过发送任务给后台Service来提升UI的性能并避免ANR。 9 | 10 | #### [在后台加载数据](background-jobs/load-data-background/index.html) 11 | 学习如何使用CursorLoader来查询数据,同时避免影响到UI的响应性。 12 | 13 | #### [管理设备的唤醒状态](background-jobs/scheduling/index.html) 14 | 学习如何使用重复闹钟以及唤醒锁来执行后台任务。 15 | -------------------------------------------------------------------------------- /basics/data-storage/index.md: -------------------------------------------------------------------------------- 1 | # 数据保存 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 虽然可以在onPause()时保存一些信息以免用户的使用进度被丢失,但大多数Android app仍然是需执行保存数据的动作。大多数较好的apps都需要保存用户的设置信息,而且有一些apps必须维护大量的文件信息与DB信息。本章节将介绍Android中主要的数据存储方法,包括: 6 | 7 | * [**保存到Preferences**](shared-preference.html) 8 | 9 | 学习使用Shared Preferences文件以Key-Value的方式保存简要的信息。 10 | 11 | 12 | * [**保存到文件**](files.html) 13 | 14 | 学习保存基本的文件。 15 | 16 | 17 | * [**保存到数据库**](database.html) 18 | 19 | 学习使用SQLite数据库读写数据。 20 | -------------------------------------------------------------------------------- /best-security.md: -------------------------------------------------------------------------------- 1 | # 保护安全与隐私的最佳策略 2 | 3 | > 编写:[craftsmanBai](https://github.com/craftsmanBai) - - 原文: 4 | 5 | 下面的课程教你如何确保应用程序数据的安全。 6 | 7 | 8 | ## [安全要点](security/security-tips.html) 9 | 10 | 怎样执在执行多个任务的同时确保应用程序数据和用户数据的安全。 11 | 12 | ## [HTTPS和SSL的安全](security/security-ssl.html) 13 | 14 | 如何确保应用程序在进行网络传输时是安全的。 15 | 16 | ## [更新你的Security Provider对抗SSL漏洞攻击](security/security-gms-provider.html) 17 | 18 | 如何使用和更新Google Play services security provider来对抗SSL漏洞攻击。 19 | 20 | ## [企业级开发](enterprise/index.html) 21 | 22 | 如何为企业级应用程序实施设备管理策略。 23 | -------------------------------------------------------------------------------- /ux/search/index.md: -------------------------------------------------------------------------------- 1 | # 增加搜索功能 2 | 3 | > 编写:[Lin-H](https://github.com/Lin-H) - 原文: 4 | 5 | Android的内置搜索功能,能够在app中方便地为所有用户提供一个统一的搜索体验。根据设备所运行的Android版本,有两种方式可以在你的app中实现搜索。本节课程涵盖如何像Android 3.0中介绍的那样用[SearchView](http://developer.android.com/reference/android/widget/SearchView.html)添加搜索,使用系统提供的默认搜索框来向下兼容旧版本Android。 6 | 7 | ## Lessons 8 | 9 | * [建立搜索界面](setup.md) 10 | 11 | 学习如何向你的app中添加搜索界面,如何设置activity去处理搜索请求 12 | 13 | 14 | * [保存并搜索数据](search.md) 15 | 16 | 学习在SQLite虚拟数据库表中用简单的方法储存和搜索数据 17 | 18 | 19 | * [保持向下兼容](backward-compat.md) 20 | 21 | 通过使用搜索功能来学习如何向下兼容旧版本设备 22 | -------------------------------------------------------------------------------- /input/game-controller/index.md: -------------------------------------------------------------------------------- 1 | # 支持游戏控制器 2 | 3 | > 编写:[heray1990](https://github.com/heray1990) - 原文: 4 | 5 | 我们可以通过支持游戏控制器来增强用户体验。Android framework 提供了 APIs 来检测和处理游戏控制器的用户输入。 6 | 7 | 这节课介绍了如何使我们的游戏在不同的 Android API levels(API level 9或者更高) 间稳定地工作。还介绍了如何通过在我们的 App 中支持多个游戏控制器来增强用户体验。 8 | 9 | ## Lessons 10 | 11 | [**处理控制器输入动作**](controller-inputs.html) 12 | 13 |   学习如何处理游戏控制器常用的输入元素,包括方向键按钮(D-pad)、游戏键盘和摇杆。 14 | 15 | [**在不同的 Android 系统版本支持控制器**](compatibility.html) 16 | 17 |   学习如何使游戏控制器在运行不同 Android 系统版本的设备上保持行为一致。 18 | 19 | [**支持多个游戏控制器**](multi-controller.html) 20 | 21 |   学习如何检测和使用多个同时连接的游戏控制器。 -------------------------------------------------------------------------------- /basics/permissions/declaring.md: -------------------------------------------------------------------------------- 1 | # 声明权限 2 | 3 | > 编写:[NothingOne](https://github.com/NothingOne) - 原文: 4 | 5 | 每个Android应用程序都运行在一个有访问限制的沙盒中。如何一个应用程序需要使用它自己的沙盒以外的资源或信息,那么它必须请求相应的权限。你要在[App Manifest](http://developer.android.com/guide/topics/manifest/manifest-intro.html)的权限列表中声明你的应用程序需要的权限。 6 | 7 | 根据权限的敏感程度,系统自动授予权限或者设备用户授予权限。举个例子,如果你的应用程序请求打开设备手电筒的权限,系统就会自动授予权限。如果你的应用程序需要读取用户的联系人,则系统会询问用户是否批准权限。根据不同的平台版本,用户在安装应用程序时(在Android5.1及以下版本),或在应用程序运行时(在Android6.0及更高版本)授予权限。 8 | 9 | 10 | ## 确定你的应用程序需要什么权限(Determine What Permissions Your App Needs) 11 | 12 | 13 | ## 在Manifest中加入权限(Add Permissions to the Manifest) 14 | 15 | -------------------------------------------------------------------------------- /gitbook/jsrepl/langs/javascript/jsrepl_js.js: -------------------------------------------------------------------------------- 1 | (function(){self.JSREPLEngine=function(){function a(d,b,c,a,e,f){this.result=c;this.error=a;this.sandbox=e;this.inspect=this.sandbox.console.inspect;this.functionClass=this.sandbox.Function;this.sandbox.__eval=this.sandbox.eval;f()}a.prototype.Eval=function(d){var b;try{return b=this.sandbox.__eval(d),this.result(b===void 0?"":this.inspect(b))}catch(a){return this.error(a)}};a.prototype.RawEval=function(a){var b;try{return b=this.sandbox.__eval(a),this.result(b)}catch(c){return this.error(c)}};a.prototype.GetNextLineIndent= 2 | function(a){try{return new this.functionClass(a),false}catch(b){return/[\[\{\(]$/.test(a)?1:0}};return a}()}).call(this); 3 | -------------------------------------------------------------------------------- /basics/supporting-devices/index.md: -------------------------------------------------------------------------------- 1 | # 兼容不同的设备 2 | 3 | > 编写:[Lin-H](http://github.com/Lin-H) - 原文: 4 | 5 | 全世界的Android设备有着各种各样的大小和尺寸。通过各种各样的设备类型,能使我们通过自己的app接触到广大的用户群体。为了能在各种Android平台上使用,我们的app需要兼容各种不同的设备类型。某些例如语言,屏幕尺寸,Android的系统版本等重要的变量因素需要重点考虑。 6 | 7 | 本课程会教我们如何使用基础的平台功能,利用替代资源和其他功能,使app仅用一个app程序包(APK),就能向用Android兼容设备的用户提供最优的用户体验。 8 | 9 | ## Lessons 10 | 11 | * [**适配不同的语言**](languages.html) 12 | 13 | 学习如何使用字符串替代资源实现支持多国语言。 14 | 15 | 16 | * [**适配不同的屏幕**](screens.html) 17 | 18 | 学习如何根据不同尺寸分辨率的屏幕来优化用户体验。 19 | 20 | 21 | * [**适配不同的系统版本**](platforms.html) 22 | 23 | 学习如何在使用新的用户编程接口(API)时向下兼容旧版本Android。 24 | -------------------------------------------------------------------------------- /background-jobs/scheduling/index.md: -------------------------------------------------------------------------------- 1 | # 管理设备的唤醒状态 2 | 3 | > 编写:[jdneo](https://github.com/jdneo),[lttowq](https://github.com/lttowq) - 原文: 4 | 5 | 当一个Android设备闲置时,首先它的屏幕将会变暗,然后关闭屏幕,最后关闭CPU。 6 | 这样可以防止设备的电量被迅速消耗殆尽。但是,有时候也会存在一些特例: 7 | 8 | * 例如游戏或视频应用需要保持屏幕常亮; 9 | * 其它应用也许不需要屏幕常亮,但或许会需要CPU保持运行,直到某个关键操作结束。 10 | 11 | 这节课描述如何在必要的时候保持设备唤醒,同时又不会过多消耗它的电量。 12 | 13 | ## Demos 14 | [**Scheduler.zip**](http://developer.android.com/shareables/training/Scheduler.zip) 15 | 16 | ## Lessons 17 | 18 | ### [保持设备唤醒](wake-lock.html) 19 | 20 | 学习如何在必要的时候保持屏幕和CPU唤醒,同时减少对电池寿命的影响。 21 | 22 | ### [调度重复闹钟](alarms.html) 23 | 24 | 对于那些发生在应用生命周期之外的操作,学习如何使用重复闹钟对它们进行调度,即使该应用没有运行或者设备处于睡眠状态。 25 | 26 | -------------------------------------------------------------------------------- /connectivity/cloudsync/index.md: -------------------------------------------------------------------------------- 1 | # 云同步 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo),[jdneo](https://github.com/jdneo) - 原文: 4 | 5 | 通过为网络连接提供强大的 API,Android Framework 可以帮助我们建立丰富的、具有云功能的 App。这些 App 可以同步数据到远程服务器端,确保我们所有的设备都能保持数据同步,并且重要的数据都能够备份在云端。 6 | 7 | 本章节会介绍几种不同的策略来实现具有云功能的 App。包括:使用我们自己的后端网络应用进行数据云同步,以及使用云对数据进行备份。这样的话,当用户将我们的 app 安装到一台新的设备上时,他们之前的使用数据就可以得到恢复了。 8 | 9 | ## Lessons 10 | 11 | * [**使用备份API**](backupapi.html) 12 | 13 | 学习如何将 Backup API 集成到应用中。通过 Backup API 可以将用户数据(比如配置信息、笔记、高分记录等)无缝地在多台设备上进行同步更新。 14 | 15 | 16 | * [**使用Google Cloud Messaging(已废弃)**](gcm.html) 17 | 18 | 学习如何高效的发送多播消息,如何正确地响应接收到的Google Cloud Messaging (GCM) 消息,以及如何使用GCM消息与服务器进行高效同步。 19 | -------------------------------------------------------------------------------- /multimedia/printing/index.md: -------------------------------------------------------------------------------- 1 | # 打印 2 | 3 | > 编写:[jdneo](https://github.com/jdneo) - 原文: 4 | 5 | Android用户经常需要在设备上单独地阅览信息,但有时候也需要为了分享信息而不得不给其他人看自己设备的屏幕,这显然不是分享信息的好办法。如果我们可以通过Android应用把希望分享的信息打印出来,这将给用户提供一种从应用获取更多信息的好办法,更何况这么做还能将信息分享给其他那些不使用我们的应用的人。另外,打印服务还能创建信息的快照(生成PDF文件),而这一切不需要打印设备,无线网络连接,也不会消耗过多电量。 6 | 7 | 在Android 4.4(API Level 19)及更高版本的系统中,框架提供了直接从Android应用程序打印图片和文字的服务。这系列课程将展示如何启用打印:包括打印图片,HTML页面以及创建自定义的打印文档。 8 | 9 | ## Lessons 10 | 11 | * [**打印照片**](photos.html) 12 | 13 | 这节课将展示如何打印一幅图像。 14 | 15 | 16 | * [**打印HTML文档**](html-docs.html) 17 | 18 | 这节课将展示如何打印一个HTML文档。 19 | 20 | 21 | * [**打印自定义文档**](custom-docs.html) 22 | 23 | 这节课将展示如何连接到Android打印管理器,创建一个打印适配器并建立要打印的内容。 24 | 25 | -------------------------------------------------------------------------------- /animations/index.md: -------------------------------------------------------------------------------- 1 | # 添加动画 2 | 3 | > 编写:[XizhiXu](https://github.com/XizhiXu) - 原文: 4 | 5 | 动画可以为我们的App增加精细的视觉提示,并且能改进App界面的思维模型。当界面改变其状态时(例如加载内容或新操作可用时),动画特别有帮助。另外,动画也能让我们的App外观更加优雅,为用户提供一种更好的使用体验。 6 | 7 | 但是记住:滥用动画或者在错误时机使用动画也是有害的,比如他们会造成延迟。本系列课程将会讲解如何应用常用动画类型来提升易用性。我们的目标是在不给用户用户增加烦恼的前提下提升App的“气质”。 8 | 9 | ## Lessons 10 | 11 | * [View间渐变](crossfade.html) 12 | 13 | 学习在重叠View间的淡入淡出。作为一个例子,我们将会学习如何在一个进度条与一个包含了文本内容的View之间实现淡入淡出的效果。 14 | 15 | 16 | * [用ViewPager实现屏幕滑动](screen-slide.html) 17 | 18 | 学习怎样为水平相邻的界面提供滑动动画。 19 | 20 | 21 | * [展示Card翻转动画](cardflip.html) 22 | 23 | 学习怎样实现两个View之间的翻转动画。 24 | 25 | 26 | * [缩放View](zoom.html) 27 | 28 | 学习怎样通过触控放大一个View。 29 | 30 | 31 | * [布局变更动画](layout.html) 32 | 33 | 学习在增加、移除或更新子View时,怎样使用内置的动画效果。 34 | -------------------------------------------------------------------------------- /ui/accessibility/index.md: -------------------------------------------------------------------------------- 1 | # 实现辅助功能 2 | 3 | > 编写:[K0ST](https://github.com/K0ST) - 原文: 4 | 5 | 当我们需要尽可能扩大我们用户的基数的时候,就要开始注意我们软件的可达性了(*Accessibility 易接近,可亲性*)。在界面中展示提示对大多数用户而言是可行的,比如说当按钮被按下时视觉上的变化,但是对于那些视力上有些缺陷的用户而言效果就不是那么理想了。 6 | 7 | 本章将给您演示如何最大化利用Android框架中的Accessibility特性。包括如何利用焦点导航(*focus navigation*)与内容描述(*content description*)对你的应用的可达性进行优化。也包括了创建Accessibility Service, 使用户与应用(不仅仅是你自己的应用)之间的交互更加容易。 8 | 9 | ## Lessons 10 | 11 | * [**开发Accessibility应用**](accessible-app.md) 12 | 13 | 学习如何让你的程序更易用,具有可达性。 允许使用键盘或者十字键(*directional pad*)来进行导航,利用Accessibility Service特性设置标签或执行事件来打造更舒适的用户体验。 14 | 15 | 16 | * [**编写 Accessibility Services**](accessible-service.md) 17 | 18 | 编写一个Accessibility Service来监听可达性事件,利用这些不同类型的事件和内容描述来帮助用户与应用的交互。本例将会实现利用一个TTS引擎来向用户发出语音提示的功能。 19 | -------------------------------------------------------------------------------- /basics/firstapp/index.md: -------------------------------------------------------------------------------- 1 | # 建立第一个App 2 | 3 | > 编写:[yuanfentiank789](https://github.com/yuanfentiank789) - 原文: 4 | 5 | 欢迎开始Android应用开发之旅! 6 | 7 | 本章节我们将学习如何建立我们的第一个Android应用程序。我们将学到如何使用Android Studio创建一个Android项目并运行该应用程序的可调试版本。此外,我们还将学习到一些Android应用程序设计的基础知识,包括如何创建一个简单的用户界面,以及处理用户输入。 8 | 9 | 开始本章节学习之前,我们要确保已经安装了开发环境。我们需要: 10 | 11 | 1 下载并安装[Android Studio](https://developer.android.com/studio/index.html). 12 | 13 | 2 使用[SDK Manager](http://developer.android.com/tools/help/sdk-manager.html)(可以设置g.cn:80作为SDK代理,实现免翻墙更新SDK)下载最新的SDK tools和platforms。 14 | 15 | > **Note**:虽然这一系列的培训课程中的大多数章节都预期你会使用Android Studio来进行开发,但某些开发操作还是可以通过SDK tools中提供的命令来实现的。 16 | 17 | 本章节通过向导的方式来逐步创建一个小型的Android应用,通过这些步骤来教给我们一些Android开发的基本概念,因此你很有必要按照教程的步骤来学习操作。 18 | 19 | [开始学习](creating-project.html) 20 | -------------------------------------------------------------------------------- /multimedia/camera/index.md: -------------------------------------------------------------------------------- 1 | # 拍照 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 在多媒体技术还未流行之时,我们的世界并不像现在这样多姿多彩。还记得Gopher吗?(*Gopher是计算机上的一个工具软件,是Internet提供的一种由菜单式驱动的信息查询工具,采用客户机/服务器模式*)。如果我们希望将我们的应用变成用户生活的一部分,那么我们应该给用户提供一种方式,让他们可以将自己的生活融入到我们的应用中来。通过相机,我们的应用可以让用户扩展他们所看到的事物:生成唯一的头像,通过相机玩寻找僵尸的交互性游戏,亦或者是分享他们的某些经历。 6 | 7 | 这一章节,我们会学习如何简单地借助于已经存在的相机应用,完成一些特定的功能。在后面的课程中,我们还会更加深入地学习如何直接控制相机硬件。 8 | 9 | **样例代码** 10 | 11 | [PhotoIntentActivity.zip](http://developer.android.com/shareables/training/PhotoIntentActivity.zip) 12 | 13 | ## Lessons 14 | 15 | * [**轻松拍摄照片**](photobasics.html) 16 | 17 | 用仅仅几行代码调用其他应用拍照。 18 | 19 | 20 | * [**轻松录制视频**](videobasics.html) 21 | 22 | 用仅仅几行代码调用其他应用录像。 23 | 24 | 25 | * [**控制相机**](cameradirect.html) 26 | 27 | 直接控制相机硬件,实现你自己的相机应用。 28 | -------------------------------------------------------------------------------- /input/keyboard-input/index.md: -------------------------------------------------------------------------------- 1 | # 处理键盘输入 2 | 3 | > 编写:[zhaochunqi](https://github.com/zhaochunqi) - 原文: 4 | 5 | 当当前焦点在 UI 的文本框上时,Android 系统会在屏幕上显示一个键盘 - 被称为*软输入法*。为了提供最好的用户体验,我们可以指定我们期望的输入类型的特征(例如,是否是电话号码或Email地址)和输入法的表现形式(例如,是否需要自动纠正拼写错误)。 6 | 7 | 除了使用屏幕上的输入法,Android也支持实体键盘,所以充分利用可能会被用户接入的外接键盘来优化用户的交互体验是很重要的。 8 | 9 | 接下来的课程会讨论上述这些主题和更多相关内容。 10 | 11 | ## Lessons 12 | 13 | [**指定输入法类型**](type.html) 14 | 15 | 学习如何表现特定的软输入法,如为电话号码、网址和其他一些格式所做的设计。同样应该学习如何指定一些属性,例如拼写建议和像**确定(Done)**或者**下一步(Next)**这样的动作按钮。 16 | 17 | 18 | [**处理输入法的显示**](visibility.html) 19 | 20 | 学习如何合适地展示软输入法,和如何让我们的布局作出调整,来适合因为输入法而减少的屏幕空间。 21 | 22 | 23 | [**支持键盘导航**](navigation.html) 24 | 25 | 学习如何验证用户是否能够使用键盘导航我们的应用以及如何对导航顺序做出必要的改变。 26 | 27 | 28 | [**处理键盘行为**](commands.html) 29 | 30 | 学习如何对用户的键盘输入作出回应。 31 | -------------------------------------------------------------------------------- /tv/tif/index.md: -------------------------------------------------------------------------------- 1 | # 创建TV直播应用 2 | 3 | > 编写:[dupengwei](https://github.com/dupengwei) - 原文:http://developer.android.com/training/tv/tif/index.html 4 | 5 | 看电视直播节目和其他连续的、基于频道的内容是TV体验的主要部分。Android 通过Android 5.0中的TV Input Framework支持直播视频内容的接收和重放(API Level 21)。该框架提供了一个统一的方法,从硬件源(如HDMI端口和内置调谐器)和软件源(如流传在互联网上的视频)接收音频和视频内容。 6 | 7 | 8 | 该框架能使开发人员通过实现TV输入服务定义直播TV输入源。该服务发布一个频道和节目列表到一个TV Provider上。电视设备的直播电视应用从TV Provider获取可用的频道和节目列表并显示给用户。当用户选择某个特定的频道,直播TV应用软件通过TV Input Manager为相关TV输入服务创建一个会话,并告诉TV输入服务调整到请求频道,然后将内容显示到TV应用软件提供的显示器上。 9 | ![tv-tif-overview](tv-tif-overview.png) 10 | **图1**.电视输入框架功能图 11 | 12 | TV Input Framework 的设计目的是提供各种各样的TV输入源并把它们整合到一个单一的用户界面供用户浏览、查看和享受内容。为你想要传播的节目构建一个TV输入服务之后,用户可以更加轻易地通过TV设备收看这些节目。 13 | 14 | 15 | 更多关于TV输入框架的信息,请参考[android.media.tv](http://developer.android.com/reference/android/media/tv/package-summary.html)。 16 | 17 | ----------------- 18 | 19 | 20 | -------------------------------------------------------------------------------- /content-sharing/sharing/index.md: -------------------------------------------------------------------------------- 1 | # 分享简单的数据 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 程序间可以互相通信是Android程序中最棒的功能之一。当一个功能已存在于其他app中,且并不是本程序的核心功能时,完全没有必要重新对其进行编写。 6 | 7 | 本章节会讲述一些通在不同程序之间通过使用[Intent](https://developer.android.com/reference/android/content/Intent.html) APIs与[ActionProvider](https://developer.android.com/reference/android/view/ActionProvider.html)对象来发送与接受content的常用方法。 8 | 9 | ## Lessons 10 | 11 | * [**向其他App发送简单的数据 - Sending Simple Data to Other Apps**](send.html) 12 | 13 | 学习如何使用intent向其他app发送text与binary数据。 14 | 15 | 16 | * [**接收从其他App返回的数据 - Receiving Simple Data from Other Apps**](receive.html) 17 | 18 | 学习如何通过Intent在我们的app中接收来自其他app的text与binary数据。 19 | 20 | 21 | * [**给ActionBar增加分享功能 - Adding an Easy Share Action**](shareaction.html) 22 | 23 | 学习如何在Acitonbar上添加一个分享功能。 24 | -------------------------------------------------------------------------------- /best-performance.md: -------------------------------------------------------------------------------- 1 | # 性能优化 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 下面的这些课程会介绍如何提升应用的性能,如何尽量减少电量的消耗。 6 | 7 | #### [管理应用的内存](performance/memory.html) 8 | 9 | 如何减少内存的占用。 10 | 11 | #### [代码性能优化建议](performance/performance-tips.html) 12 | 13 | 如何提高应用的响应性与电池的使用效率。 14 | 15 | #### [提升Layout的性能](performance/improving-layouts/index.html) 16 | 17 | 如何提升UI的性能。 18 | 19 | #### [优化电池寿命](performance/monitor-device-state/index.html) 20 | 21 | 如何优化电量的消耗。 22 | 23 | #### [多线程操作](performance/multi-threads/index.html) 24 | 25 | 如何通过多线程分拆任务来提高程序性能。 26 | 27 | #### [避免出现程序无响应ANR](performance/perf-anr/index.html) 28 | 29 | 如何避免ANR。 30 | 31 | #### [JNI技巧](performance/perf-jni/index.html) 32 | 33 | 如何高效的使用JNI。 34 | 35 | #### [SMP Primer for Android](performance/smp/index.html) 36 | 37 | 优化多核处理器架构下的Android程序。 38 | 39 | 40 | -------------------------------------------------------------------------------- /multimedia/audio/index.md: -------------------------------------------------------------------------------- 1 | # 管理音频播放 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 如果我们的应用能够播放音频,那么让用户能够以自己预期的方式控制音频是很重要的。为了保证良好的用户体验,我们应该让应用能够管理当前的音频焦点,因为这样才能确保多个应用不会在同一时刻一起播放音频。 6 | 7 | 在学习本系列课程中,我们将会创建可以对音量按钮进行响应的应用,该应用会在播放音频的时候请求获取音频焦点,并且在当前音频焦点被系统或其他应用所改变的时候,做出正确的响应。 8 | 9 | ## Lessons 10 | 11 | * [**控制音量与音频播放(Controlling Your App’s Volume and Playback)**](volume-playback.html) 12 | 13 | 学习如何确保用户能通过硬件或软件音量控制器调节应用的音量(通常这些控制器上还具有播放、停止、暂停、跳过以及回放等功能按键)。 14 | 15 | 16 | * [**管理音频焦点(Managing Audio Focus)**](audio-focus.html) 17 | 18 | 由于可能会有多个应用具有播放音频的功能,考虑他们如何交互非常重要。为了防止多个音乐应用同时播放音频,Android使用音频焦点(Audio Focus)来控制音频的播放。在这节课中可以学习如何请求音频焦点,监听音频焦点的丢失,以及在这种情况发生时应该如何做出响应。 19 | 20 | 21 | * [**兼容音频输出设备(Dealing with Audio Output Hardware)**](audio-output.html) 22 | 23 | 音频有多种输出设备,在这节课中可以学习如何找出播放音频的设备,以及处理播放时耳机被拔出的情况。 24 | -------------------------------------------------------------------------------- /ui/backward-compatible-ui/index.md: -------------------------------------------------------------------------------- 1 | # 创建向后兼容的UI 2 | 3 | > 编写:[spencer198711](https://github.com/spencer198711) - 原文: 4 | 5 | 这一课展示了如何以向后兼容的方式使用在新版本的Android上可用的UI组件和API,确保你的应用在之前的版本上依然能够运行。 6 | 7 | 贯穿整个课程,在Android 3.0被新引入的[Action Bar Tabs](http://developer.android.com/guide/topics/ui/actionbar.html#Tabs)功能在本课程中作为指导例子,但是你可以在其他UI组件和API功能上运用这种方式。 8 | 9 | ## Sample 10 | 11 | 12 | 13 | ## Lessons 14 | 15 | * [**抽象出新的APIs**](abstract.md) 16 | 17 | 决定你的应用需要的功能和接口。学习如何为你的应用定义面向特定应用的、作为中间媒介并抽象出UI组件具体实现的java接口。 18 | 19 | 20 | * [**代理至新的APIs**](new-impl.md) 21 | 22 | 学习如何创建使用新的APIs的接口的具体实现 23 | 24 | 25 | * [**使用旧的APIs实现新API的效果**](old-impl.md) 26 | 27 | 学习如何创建使用老的APIs的自定义的接口实现 28 | 29 | 30 | * [**使用能感知版本的组件**](using-component.md) 31 | 32 | 学习如何在运行的时候去选择一个具体的实现,并且开始在你的应用中使用接口。 33 | -------------------------------------------------------------------------------- /content-sharing/beam-files/index.md: -------------------------------------------------------------------------------- 1 | # 使用NFC分享文件 2 | 3 | > 编写:[jdneo](https://github.com/jdneo) - 原文: 4 | 5 | Android允许我们通过Android Beam文件传输功能在设备之间传送大文件。该功能具有简单的API,它使得用户仅需要通过一些简单的触控操作就能启动文件传输过程。Android Beam会自动地将文件从一台设备拷贝至另一台设备中,并在完成时告知用户。 6 | 7 | Android Beam文件传输API可以用来处理规模较大的数据,而在Android4.0(API Level 14)引入的Android Beam NDEF传输API则用来处理规模较小的数据,如URI或者消息数据等。另外,Android Beam仅仅只是Android NFC框架提供的众多特性之一,它允许我们从NFC标签中读取NDEF消息。更多有关Android Beam的知识,请参考:[Beaming NDEF Messages to Other Devices](http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#p2p)。更多有关NFC框架的知识,请参考:[Near Field Communication](http://developer.android.com/guide/topics/connectivity/nfc/index.html)。 8 | 9 | ## Lessons 10 | 11 | * [**发送文件给其他设备**](sending-files.html) 12 | 13 | 学习如何配置应用程序,使其可以发送文件给其他设备。 14 | 15 | 16 | * [**接收其他设备的文件**](receive-files.html) 17 | 18 | 学习如何配置应用程序,使其可以接收其他设备发送的文件。 19 | -------------------------------------------------------------------------------- /testing/activity-testing/index.md: -------------------------------------------------------------------------------- 1 | # 测试你的Activity 2 | 3 | > 编写:[huanglizhuo](https://github.com/huanglizhuo) - 原文: 4 | 5 | 我们应该把编写和运行测试作为Android应用开发周期的一部分。完备的测试可以帮助我们在开发过程中尽早发现漏洞,并让我们对自己的代码更有信心。 6 | 7 | 测试用例定义了一系列对象和方法从而独立进行多个测试。测试用例可以编写成测试组并按计划的运行,由测试框架组织成一个可以重复运行的测试Runner(运行器,译者注)。 8 | 9 | 这节内容将会讲解如何基于最流行的JUnit框架来自定义测试框架。我们可以编写测试用例来测试我们应用程序的特定行为,并在不同的Android设备上检测一致性。测试用例还可以用来描述应用组件的预期行为,并作为内部代码文档。 10 | 11 | ## 课程 12 | 13 | * [**建立测试环境**](prepare-activity-testing.html) 14 | 15 | 学习如何创建测试项目 16 | 17 | * [**创建与执行测试用例**](activity-basic-testing.html) 18 | 19 | 学习如何写测试用例来检验Activity中的特性,并使用Android框架提供的Instrumentation运行用例。 20 | 21 | * [**测试UI组件**](activity-ui-testing.html) 22 | 23 | 学习如何编写UI测试用例 24 | 25 | * [**创建单元测试**](activity-unit-testing.html) 26 | 27 | 学习如何隔离开Activity执行单元测试 28 | 29 | * [**创建功能测试**](activity-function-testing.html) 30 | 31 | 学习如何执行功能测试来检验各Activity之间的交互 32 | -------------------------------------------------------------------------------- /performance/improving-layouts/index.md: -------------------------------------------------------------------------------- 1 | # 提升Layout的性能 2 | 3 | > 编写: [allenlsy](https://github.com/allenlsy) - 原文: 4 | 5 | Layout 是 Android 应用中直接影响用户体验的关键部分。如果实现的不好,你的 Layout 会导致程序非常占用内存并且 UI 运行缓慢。Android SDK 带有帮助你找到 Layout 性能问题的工具。结合本课内容使用它,你将学会使用最小的内存空间实现流畅的 UI。 6 | 7 | ## Lessons 8 | 9 | #### [优化Layout的层级](optimizing-layout.html) 10 | 11 | 就像一个复杂的网页会减慢载入速度,你的Layout结构如果太复杂,也会造成性能问题。本节教你如何使用SDK自带工具来查看Layout并找到性能瓶颈。 12 | 13 | #### [使用``标签重用Layout](reuse-layouts.html) 14 | 15 | 如果你的程序的 UI 在不同地方重复使用某个 Layout,那本节将教你如何创建高效的,可重用的Layout部件,并把它们“包含”到其他 UI Layout 中。 16 | 17 | #### [按需载入视图](loading-ondemand.html) 18 | 19 | 除了简单的把一个 Layout 包含到另一个 Layout 中,你可能还想在程序开始之后,仅当你的 Layout 对用户可见时才开始载入。本节告诉你如何使用分步载入 Layout 来提高 Layout 的首次加载性能。 20 | 21 | #### [优化ListView的滑动性能](smooth-scrolling.html) 22 | 23 | 如果你有一个每个列表项 (item) 都包含很多数据或者复杂数据的 ListView ,那么列表滚动的性能很有可能会存在问题。本节会介绍给你一些如何优化滚动流畅度的技巧。 24 | -------------------------------------------------------------------------------- /performance/monitor-device-state/index.md: -------------------------------------------------------------------------------- 1 | # 优化电池寿命 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 显然,手持设备的电量使用情况需要引起很大的重视。通过这一系列的课程,你将学会如何根据设备的状态来改变App的某些行为与功能。 6 | 7 | 通过在失去网络连接时关闭后台更新服务,在剩余电量较低时减少更新数据的频率等操作,你可以在不影响用户体验的前提下,确保App对电池寿命的影响减到最小。 8 | 9 | # 课程 10 | 11 | ## [检测电量与充电状态](battery-monitor.html) 12 | 13 | 学习如何通过判断与检测当前电池电量以及充电状态的变化,改变应用程序的更新频率。 14 | 15 | ## [判断并监测设备的底座状态与类型](docking-monitor.html) 16 | 17 | 设备使用习惯的区别也会影响到刷新频率的优化措施,这节课中将学习如何判断与监测底座状态及其种类来改变应用程序的行为。 18 | 19 | ## [判断并检测网络连接状态](connectivity-monitor.html) 20 | 21 | 在没有连接到互联网的情况下,你是无法在线更新应用的。这一节课将学习如何根据网络的连接状态,改变后台更新的频率,以及如何在高带宽传输任务开始前,判断网络连接类型(Wi-Fi/数据连接)。 22 | 23 | ## [按需操纵BroadcastReceiver](manifest-receivers.html) 24 | 25 | 在Manifest清单文件中声明的BroadcastReceiver可以在运行时切换其开启状态,这样一来,我们就可以根据当前设备的状态,禁用那些没有必要开启的BroadcastReceiver。在这一节课将学习如何通过切换这些BroadcastReceiver的开启状态,以及如何根据设备的状态延迟某一操作的执行时机,来提高应用的效率。 26 | -------------------------------------------------------------------------------- /tv/playback/index.md: -------------------------------------------------------------------------------- 1 | # 创建TV播放应用 2 | 3 | > 编写:[huanglizhuo](https://github.com/huanglizhuo) - 原文: 4 | 5 | 6 | 浏览和播放媒体文件往往是由一个TV应用程序提供的用户体验的一部分。从头开始构建这样的体验,并同时确保它是快速,流畅,和有吸引力的是具有相当挑战性的。您的应用程序提供访问媒体类别无论大小,允许用户快速浏览选项,并获得他们想要的内容是很重要的。 7 | 8 | Android框架通过[v17 leanback support library](http://developer.android.com/tools/support-library/features.html#v17-leanback)为构建用户界面提供接口。该库提供类来创建用于浏览和播放多媒体的高效框架,为开发者减少代码。该类可以进行扩展和定制,所以我们可以为我们的应用程序创建一个独特的高效的类。 9 | 10 | 这节课将向您介绍如何用Leanback的支持库构建用于浏览和播放TV媒体内容的TV应用程序。 11 | 12 | ##主题 13 | 14 | * [**创建一个类别浏览器**](browse.html) 15 | 16 | 学习如何使用Leanback的支持库,建立一个媒体类别的浏览界面。 17 | 18 | * [**提供一个卡片View**](card.html) 19 | 20 | 学习使用Leanback的支持库,建立一个卡片视图的内容项目。 21 | 22 | * [**创建详细信息View**](details.html) 23 | 24 | 学习使用Leanback的支持库,建立一个详细内容展示页。 25 | 26 | * [**显示正在播放卡片**](now-playing.html) 27 | 28 | 学习如何使用MediaSession在主屏幕上显示正在播放。 29 | 30 | --------------- 31 | [下一节:创建一个类别浏览器 >](browse.html) 32 | -------------------------------------------------------------------------------- /basics/intents/index.md: -------------------------------------------------------------------------------- 1 | # 与其他应用的交互 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | * 一个Android app通常都会有多个activities。 每个activity的界面都扮演者用户接口的角色,允许用户执行一些特定任务(例如查看地图或者是开始拍照等)。为了让用户能够从一个activity跳到另一个activity,我们的app必须使用Intent来定义自己的意图。当使用startActivity()的方法,且参数是intent时,系统会使用这个 Intent 来定义并启动合适的app组件。使用intents甚至还可以让app启动另一个app里面的activity。 6 | * 一个 Intent 可以显式的指明需要启动的模块(用一个指定的Activity实例),也可以隐式的指明自己可以处理哪种类型的动作(比如拍一张照等)。 7 | * 本章节将演示如何使用Intent 与其他app执行一些基本的交互。比如启动另外一个app,从其他app接受数据,以及使得我们的app能够响应从其他app中发出的intent等。 8 | 9 | ## Lessons 10 | * [**Intent的发送(Sending the User to Another App )**](sending.html) 11 | 12 | 演示如何创建一个隐式Intent唤起能够接收这个动作的App。 13 | 14 | 15 | * [**接收Activity返回的结果(Getting a Result from an Activity)**](result.html) 16 | 17 | 演示如何启动另外一个Activity并接收返回值。 18 | 19 | 20 | * [**Intent过滤(Allowing Other Apps to Start Your Activity)**](filters.html) 21 | 22 | 演示如何通过定义隐式的Intent的过滤器来使我们的应用能够被其他应用唤起。 23 | -------------------------------------------------------------------------------- /background-jobs/run-background-service/index.md: -------------------------------------------------------------------------------- 1 | # 在IntentService中执行后台任务 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 除非我们特别为某个操作指定特定的线程,否则大部分在前台UI界面上的操作任务都执行在一个叫做UI Thread的特殊线程中。这可能存在某些隐患,因为部分在UI界面上的耗时操作可能会影响界面的响应性能。UI界面的性能问题会容易惹恼用户,甚至可能导致系统ANR错误。为了避免这样的问题,Android Framework提供了几个类,用来帮助你把那些耗时操作移动到后台线程中执行。那些类中最常用的就是[IntentService](http://developer.android.com/reference/android/app/IntentService.html). 6 | 7 | 这一章节会讲到如何实现一个IntentService,向它发送任务并反馈任务的结果给其他模块。 8 | 9 | ## Demos 10 | [**ThreadSample.zip**](http://developer.android.com/shareables/training/ThreadSample.zip) 11 | 12 | ## Lessons 13 | 14 | * [创建IntentService](create-service.html) 15 | 16 | 学习如何创建一个IntentService。 17 | 18 | 19 | * [发送任务请求给IntentService](send-request.html) 20 | 21 | 学习如何发送工作任务给IntentService。 22 | 23 | 24 | * [报告后台任务的执行状态](report-status.html) 25 | 26 | 学习如何使用Intent与LocalBroadcastManager在Activit与IntentService之间进行交互。 27 | -------------------------------------------------------------------------------- /connectivity/connect-devices-wireless/index.md: -------------------------------------------------------------------------------- 1 | # 无线连接设备 2 | 3 | > 编写:[acenodie](https://github.com/acenodie) - 原文: 4 | 5 | 除了能够在云端通信,Android 的无线 API 也允许同一局域网中的设备进行通信,甚至没有连接到网络上,而是物理上隔得很近,也可以相互通信。此外,网络服务发现(Network Service Discovery,简称NSD)可以进一步通过允许应用程序运行能相互通信的服务去寻找附近运行相同服务的设备。把这个功能整合到我们的应用中,可以提供许多功能,如在同一个房间,用户玩游戏,可以利用 NSD 实现从一个网络摄像头获取图像,或远程登录到在同一网络中的其他机器。 6 | 7 | 本节课介绍了一些使我们的应用程序能够寻找和连接其他设备的主要 API。具体地说,它介绍了用于发现可用服务的 NSD API 和能实现点对点无线连接的无线点对点(the Wi-Fi Peer-to-Peer,简称 Wi-Fi P2P)API。本节课也将告诉我们怎样将 NSD 和 Wi-Fi P2P 结合起来去检测其他设备所提供的服务。当检测到时,连接到相应的设备上。即使设备都没有连接到一个网络中。 8 | 9 | ## Lessons 10 | 11 | [**使用网络服务发现**](nsd.html) 12 | 13 | 学习如何广播由我们自己的应用程序提供的服务,如何发现在本地网络上提供的服务,并用 NSD 获取我们将要连接的服务的详细信息。 14 | 15 | 16 | [**使用 WiFi 建立 P2P 连接**](wifi-direct.html) 17 | 18 | 学习如何获取附近的对等设备,如何创建一个设备接入点,如何连接到其他具有 Wi-Fi P2P 连接功能的设备。 19 | 20 | 21 | [**使用 WiFi P2P 发现服务**](nsd-wifi-index.html) 22 | 23 | 学习如何使用 WiFi P2P 服务去发现附近的不在同一个网络的服务。 24 | -------------------------------------------------------------------------------- /tv/start/index.md: -------------------------------------------------------------------------------- 1 | # 创建TV应用 2 | > 编写:[applepyarc](https://github.com/applepyarc) - 原文: 3 | 4 | - Android 5.0(API 21)或以上 5 | 6 | Android提供丰富的用户体验,优化应用运行于诸如高清电视等大屏幕设备。TV应用有机会为沙发上的用户提供愉快的体验。 7 | 8 | TV应用使用与手机或平板应用相同的架构。这意味着你可以基于已知的Android应用开发来创建新的TV应用。或者移植已有的应用到TV设备上。但是,在UI上,TV和手机或平板大不相同。为了使应用顺畅地运行在TV设备上,我们必须设计能够在即使3米之外也易于理解的新界面,提供可以使用方向键和选择键操作的导航界面。 9 | 10 | 以下课程描述了如何开始创建TV应用,包括设置开发环境,界面及导航的基本要求,以及如何处理TV设备通常不具备的硬件特性。 11 | 12 | > **Note**: 鼓励使用[Android Studio](http://developer.android.com/sdk/installing/studio.html)创建TV应用,因为它提供了创建项目的步骤,库包含和快捷打包。本课程假设你正在使用Android Studio。 13 | 14 | ## 课程 15 | * [**创建TV应用的第一步**](start.html) 16 | 17 | 学习如何为TV应用创建一个新的Android Studio项目或者修改已有的应用运行到TV设备上。 18 | 19 | * [**处理TV硬件**](hardware.html) 20 | 21 | 学习如何检查应用是否运行在TV硬件上,处理不支持的硬件特性和管理控制器设备。 22 | 23 | * [**创建TV布局**](layouts.html) 24 | 25 | 学习TV界面的最小要求及其实现。 26 | 27 | * [**创建TV导航**](navigation.html) 28 | 29 | 学习TV导航的最小要求以及如何实现TV兼容的导航。 30 | 31 | ------ 32 | [创建TV应用的第一步 >](start.html) 33 | 34 | -------------------------------------------------------------------------------- /ux/design-nav/index.md: -------------------------------------------------------------------------------- 1 | # 设计高效的导航 2 | 3 | > 编写:[XizhiXu](https://github.com/XizhiXu) - 原文: 4 | 5 | 设计开发 App 的起初步骤之一就是决定用户能够在App上看到什么和做什么。一旦你知道用户在App上和哪种内容互动,下一步就是去设计容许用户在 App 的不同内容块间切换,进入,回退的交互。 6 | 7 | 本课程演示如何为你的应用规划出高标准的界面层次,然后为它选择适宜的导航形式来允许用户高效而直观的浏览内容。按粗略的先后顺序,每堂课涵盖Android应用导航交互设计过程中的不同阶段。学过这些课之后,你应该可以应用这些列出的方法和设计范例到你自己的应用中,为你的用户提供一致的导航体验了。 8 | 9 | ## Lessons 10 | 11 | * [**规划界面和他们之间的关系**](screen-planning.md) 12 | 13 | 学习如何选择你应用应该包含的界面。并且学习如何选择其他界面可直达的界面。这节课介绍了一个假想的新闻应用为以后课程作例子。 14 | 15 | 16 | * [**为多种大小的屏幕进行规划**](multi-sizes.md) 17 | 18 | 学习如何在大屏设备上组合相关界面来优化用户可视界面空间。 19 | 20 | 21 | * [**提供向下和横向导航**](descendant-lateral.md) 22 | 23 | 学习容许用户深入某一层或者在内容层次间横跨的技巧。而且学习一些特定导航 UI 元素在不同情景下的优缺点和最佳用法。 24 | 25 | 26 | * [**提供向上和历史导航**](ancestral-temporal.md) 27 | 28 | 学习如何容许用户在内容层级向上导航。并且学习 Back 键和历史导航的最佳做法,也即导航到和层次无关的之前的画面。 29 | 30 | 31 | * [**综合:设计样例 App**](wireframing.md) 32 | 33 | 学习如何创建界面的 Wireframe(线框图,模糊的图形模型)来代表新闻应用基于设想信息模型的界面。这些 Wireframe 利用上述课程讨论的导航元件来展示直观高效导航。 34 | -------------------------------------------------------------------------------- /ux/app-indexing/index.md: -------------------------------------------------------------------------------- 1 | # 使得你的App内容可被Google搜索 2 | 3 | > 编写:[Lin-H](https://github.com/Lin-H) - 原文: 4 | 5 | 随着移动app变得越来越普遍,用户不仅仅从网站上查找相关信息,也在他们安装的app上查找。你可以使Google能够抓取你的app内容,当内容与你自己的网页一致时,Google搜索的结果会将你的app作为结果展示给用户。 6 | 7 | 通过为你的activity提供intent filter,可以使Google搜索展示你的app中特定的内容。Google搜索应用索引(Google Search app indexing)通过在用户搜索结果的网页链接旁附上相关的app内容链接,补充了这一功能。使用移动设备的用户可以在他们的搜索结果中点击链接来打开你的app,使他们能够直接浏览你的app中的内容,而不需要打开网页。 8 | 9 | 要启用Google搜索应用索引,你需要把有关app与网页之间联系的信息提供给Google。这个过程包括下面几个步骤: 10 | 11 | 1. 通过在你的app manifest中添加intent filter来开启链接到你的app中指定内容的深度链接。 12 | 13 | 2. 在你的网站中的相关页面或Sitemap文件中为这些链接添加注解。 14 | 15 | 3. 选择允许谷歌爬虫(Googlebot)在Google Play store中通过APK抓取,建立app内容索引。在早期采用者计划(early adopter program)中作为参与者加入时,会自动选择允许。 16 | 17 | 这节课程,会向你展示如何启用深度链接和建立应用内容索引,使用户可以从移动设备搜索结果直接打开此内容。 18 | 19 | ##Lessons 20 | 21 | * [为App内容开启深度链接](deep-linking.md) 22 | 23 | 演示如何添加intent filter来启用链接app内容的深度链接 24 | 25 | 26 | * [为索引指定App内容](enable-app-indexing.md) 27 | 28 | 演示如何给网站的metadata添加注解,使Google的算法能为app内容建立索引 29 | -------------------------------------------------------------------------------- /wearables/notifications/index.md: -------------------------------------------------------------------------------- 1 | # 为Notification赋加可穿戴特性 2 | 3 | > 编写:[wangyachen](https://github.com/wangyacheng) - 原文: 4 | 5 | 当一部Android手持设备(手机或平板)与Android可穿戴设备连接后,手持设备能够自动与可穿戴设备共享Notification。在可穿戴设备上,每个Notification都是以一张新卡片的形式出现在[context stream](http://developer.android.com/design/wear/index.html)中。 6 | 7 | 与此同时,为了给予用户以最佳的体验,开发者应当为自己创建的Notification增加一些具备可穿戴特性的功能。下面的课程将指导我们如何实现同时支持手持设备和可穿戴设备的Notification。 8 | 9 | ![](notification_phone@2x.png) 10 | 11 | **Figure 1.** 同时展示在手持设备和可穿戴设备的Notification 12 | 13 | ## Lessons 14 | 15 | [创建Notification](creating.html) 16 | 17 | 学习如何应用Android support library创建具备可穿戴特性的Notification。 18 | 19 | [在Notification中接收语音输入](voice-input.html) 20 | 21 | 学习在可穿戴式设备上的Notification添加一个action以接收来自用户的语音输入,并且将录入的消息传递给手持设备应用。 22 | 23 | [为Notification添加页面](pages.html) 24 | 25 | 学习如何为Notification创建附加的页面,使得用户在向左滑动时能看到更多的信息。 26 | 27 | [将Notification放成一叠](stacks.html) 28 | 29 | 学习如何将我们应用中所有相似的notification放在一个堆叠中,使得在不将多个卡片添加到卡片流的情况下,允许用户能够独立地查看每一个Notification。 30 | -------------------------------------------------------------------------------- /basics/actionbar/index.md: -------------------------------------------------------------------------------- 1 | # 添加Action Bar 2 | 3 | > 编写:[Vincent 4J](http://github.com/vincent4j) - 原文: 4 | 5 | Action Bar是我们可以为activity实现的最重要的设计元素之一。其提供了多种 UI 特性,可以让我们的 app 与其他 Android app 保持较高的一致性,从而为用户所熟悉。核心的功能包括: 6 | 7 | * 一个专门的空间用来显示你的app的标识,以及指出目前所处在app的哪个页面。 8 | * 以一种可预见的方式访问重要的操作(比如搜索)。 9 | * 支持导航和视图切换(通过Tabs和下拉列表) 10 | 11 | ![actionbar-actions](actionbar-actions.png) 12 | 13 | 本章为 action bar 的基本知识提供了一个快速指南。关于 action bar 的更多特性,请查看 [Action Bar](https://developer.android.com/guide/topics/ui/actionbar.html) 指南。 14 | 15 | ## Lessons 16 | 17 | * [**建立ActionBar**](setting-up.html) 18 | 19 | 学习如何为 activity 添加一个基本的 action bar,是仅仅支持 Android 3.0及以上的版本,还是同时也支持至Android 2.1的版本(通过使用 Andriod Support Library)。 20 | 21 | 22 | * [**添加Action按钮**](adding-buttons.html) 23 | 24 | 学习如何在 action bar 中添加和响应用户操作。 25 | 26 | * [**ActionBar的风格化**](styling.html) 27 | 28 | 学习如何自定义 action bar 的外观。 29 | 30 | 31 | * [**ActionBar覆盖叠加**](overlaying.html) 32 | 33 | 学习如何在布局上面叠加 action bar,允许 action bar 隐藏时无缝过渡。 34 | -------------------------------------------------------------------------------- /connectivity/efficient-downloads/index.md: -------------------------------------------------------------------------------- 1 | # 传输数据时避免消耗大量电量 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 在这一章,我们将学习最小化下载,网络连接,尤其是无线电连接对电量的影响。 6 | 7 | 下面几节课会演示如何使用像缓存(caching)、轮询(polling)和预取(prefetching)这样的技术来调度与执行下载操作。我们还会学习无线电波的 power-use 属性配置是如何影响我们对于在何时,用什么,以何种方式来传输数据的选择。当然这些选择是为了最小化对电量的影响。 8 | 9 | **我们同样需要阅读** 10 | [优化电池使用时间](performance/monitoring-device-state/index.html) 11 | 12 | ## Lesson 13 | 14 | [**优化下载以高效地访问网络**](efficient-network-access.html) 15 | 16 | 这节课介绍了无线电波状态机(wireless radio state machine),解释了 app 的连接模型(connectivity model)如何与它交互,以及如何最小化数据连接和使用预取(prefetching)和捆绑(bundling)来最小化数据传输对电池消耗的影响。 17 | 18 | 19 | [**最小化定期更新造成的影响**](regular-update.html) 20 | 21 | 这节课我们将了解如何调整刷新频率以最大程度减轻底层无线电波状态机的后台更新所造成的影响。 22 | 23 | 24 | [**重复的下载是冗余的**](redundant-redundant.html) 25 | 26 | 减少下载的最根本途径是只下载我们需要的内容。这节课介绍了消除冗余下载的一些最佳实践。 27 | 28 | 29 | * [**根据网络连接类型来调整下载模式**](connectivity-patterns.html) 30 | 31 | 不同连接类型对电池电量的影响并不相同。不仅仅是 Wi-Fi 比无线电波更省电,不同的无线电波技术对电量也有不同的影响。 32 | -------------------------------------------------------------------------------- /ui/multiscreen/index.md: -------------------------------------------------------------------------------- 1 | # 为多屏幕设计 2 | 3 | > 编写:[riverfeng](https://github.com/riverfeng) - 原文: 4 | 5 | 从小屏手机到大屏电视,android拥有数百种不同屏幕尺寸的设备。因此,设计兼容不同屏幕尺寸的应用程序满足不同的用户体验就变得非常重要。 6 | 7 | 但是,只是单纯的兼容不同的设备类型是远远不够的。每个不同的屏幕尺寸都给用户体验带来不同的可能性和挑战。所以,为了充分的满足和打动用户,你的应用不仅要支持多屏幕,更要针对每个屏幕配置优化你的用户体验。 8 | 9 | 这个课程就将教你如何针对不同屏幕配置来优化你的UI。 10 | 11 | 本课程提供了一个简单的示例[NewsReader](http://developer.android.com/shareables/training/NewsReader.zip)。这个示例中每节课的代码展示了如何更好的优化多屏幕适配,你也可以将这个示例中的代码运用到你自己的项目中。 12 | 13 | > Note:这节课中相关的例子为了兼容android 3.0以下的版本使用了support library中的Fragment相关APIs。在使用该示例前,请先确定support library已经添加到你的应用中。 14 | 15 | ## Lessons 16 | 17 | * [支持不同屏幕尺寸](screen-sizes.md) 18 | 19 | 这节课程将引导你如何设计适配多种不同尺寸的布局(通过使用灵活的尺寸规格guige(dimensions),相对布局(RelativeLayout),屏幕尺寸和方向限定(qualifiers),别名过滤器(alias filter)和点9图片)。 20 | 21 | * [支持不同的屏幕密度](screen-desities.md) 22 | 23 | 这节课程将演示如何支持不同像素密度的屏幕(使用密度独立像素(dip)以及为不同的密度提供合适的位图(bitmap))。 24 | 25 | 26 | * [实现自适应UI流(Flows)](adapt-ui.md) 27 | 28 | 这节课将演示如何以UI流(flow)的方式来适配一些屏幕大小/密度组合(动态布局运行时检测,响应当前布局,处理屏幕配置变化)。 29 | -------------------------------------------------------------------------------- /basics/permissions/index.md: -------------------------------------------------------------------------------- 1 | # 使用系统权限 2 | 3 | > 编写:[NothingOne](https://github.com/NothingOne) - 原文: 4 | 5 | 为了保护系统的完整性和用户的隐私,Android的每个应用程序都在一个有限制的沙盒(sandbox)中运行。如果应用程序要使用它的沙盒以外的资源或信息,则该应用程序需要明确的请求权限。取决于该应用请求的权限类型,系统会自动授予权限,或询问用户是否授予权限。 6 | 7 | 本课程将介绍如何为您的应用程序声明和请求权限。 8 | 9 | ### You should also read 10 | [System Permissions](http://developer.android.com/guide/topics/security/permissions.html) 11 | 12 | [Interacting with other apps](http://developer.android.com/training/basics/intents/index.html) 13 | 14 | ### DESIGN PATTERNS 15 | [Permissions](https://www.google.com/design/spec/patterns/permissions.html) 16 | 17 | ## Lessons 18 | * [**声明权限(Declaring Permissions)**](declaring.html) 19 | 20 | 学习如何在应用程序的manifest中声明你需要的权限。 21 | 22 | 23 | * [**在运行时请求权限(Requesting Permissions at Run Time)**](requesting.html) 24 | 25 | 程序在运行时,如何向用户请求权限。此课只适用于运行在Android6.0(API级别23)或更高版本设备上的应用程序。 26 | 27 | 28 | * [**权限的最佳实践(Permissions Best Practices)**](best-practices.html) 29 | 30 | 此向导介绍如何以最佳用户体验来请求和使用权限。 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /performance/multi-threads/index.md: -------------------------------------------------------------------------------- 1 | # 多线程操作 2 | 3 | > 编写:[AllenZheng1991](https://github.com/AllenZheng1991) - 原文: 4 | 5 | 把一个相对耗时且数据操作复杂的任务分割成多个小的操作,然后分别运行在多个线程上,这能够提高完成任务的速度和效率。在多核CPU的设备上,系统可以并行运行多个线程,而不需要让每个子操作等待CPU的时间片切换。例如,如果要解码大量的图片文件并以缩略图的形式把图片显示在屏幕上,当你把每个解码操作单独用一个线程去执行时,会发现速度快了很多。 6 | 7 | 这个章节会向你展示如何在一个Android应用中创建和使用多线程,以及如何使用线程池对象(thread pool object)。你还将了解到如何使得代码运行在指定的线程中,以及如何让你创建的线程和UI线程进行通信。 8 | 9 | ## Sample Code 10 | 11 | 点击下载:[**ThreadSample**](http://developer.android.com/shareables/training/ThreadSample.zip) 12 | 13 | ## Lessons 14 | 15 | ###[在一个线程中执行一段特定的代码](define-runnable.html) 16 | 17 | 学习如何通过实现[Runnable](http://developer.android.com/reference/java/lang/Runnable.html)接口定义一个线程类,让你写的代码能在单独的一个线程中执行。 18 | 19 | ###[为多线程创建线程池](create-threadpool.html) 20 | 21 | 学习如何创建一个能管理线程池和任务队列的对象,需要使用一个叫[ThreadPoolExecutor](http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html)的类。 22 | 23 | ###[在线程池中的一个线程里执行代码](run-code.html) 24 | 25 | 学习如何让线程池里的一个线程执行一个任务。 26 | 27 | ###[与UI线程通信](communicate-ui.html) 28 | 29 | 学习如何让线程池里的一个普通线程与UI线程进行通信。 30 | -------------------------------------------------------------------------------- /basics/index.md: -------------------------------------------------------------------------------- 1 | # Android入门基础:从这里开始 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 欢迎来到为Android开发者准备的培训项目。在这里你会找到一系列的课程,这些课程会演示你如何使用可重用的代码来完成特定的任务。所有的课程分为若干不同的小组。你可以通过左边的导航来查看。 6 | 7 | 第1章节:“从这里开始”,教你Android应用开发的最基本的知识。如果你是一个Android应用开发的新手,你应该按照顺序学习完下面的课程: 8 | 9 | #### [建立你的第一个App(Building Your First App)](firstapp/index.html) 10 | 在你安装Android SDK之后,从这节课开始学习Android应用开发的基础知识。 11 | 12 | #### [兼容不同的设备(Supporting Different Devices)](supporting-devices/index.html) 13 | 学习给应用提供可选择的资源文件来实现如何使用一个APK来使得你的应用能够在不同的设备上获取到最佳的用户体验。 14 | 15 | #### [使用Fragment建立动态的UI(Building a Dynamic UI with Fragments)](fragments/index.html) 16 | 学习如何为你的应用建立一套足够灵活的UI,这套UI能够在大屏幕的设备上显示多个UI组件,在小屏幕的设备上呈现紧凑的UI组件。这使得你能够为手机与平板只建立同一个APK。 17 | 18 | #### [数据保存(Saving Data)](data-storage/index.html) 19 | 学习如何在设备上保存数据。无论这些数据是临时的文件,应用下载的资源,用户的多媒体数据,结构化的数据还是其他。 20 | 21 | #### [与其他应用的交互(Interacting with Other Apps)](intents/index.html) 22 | 学习如何利用其他已经存在应用的既有功能来执行更进一步的用户任务。例如拍照或者在地图上查看某个地址。 23 | 24 | #### [使用系统权限(Working with System Permissions)](permissions/index.html) 25 | 学习声明你的app需要访问在它“沙箱”之外的功能和资源,以及如何在运行时申请这些特权。 26 | -------------------------------------------------------------------------------- /background-jobs/load-data-background/index.md: -------------------------------------------------------------------------------- 1 | # 使用CursorLoader在后台加载数据 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 从[ContentProvider](http://developer.android.com/reference/android/content/ContentProvider.html)查询你需要显示的数据是比较耗时的。如果你在Activity中直接执行查询的操作,那么有可能导致Activity出现ANR的错误。即使没有发生ANR,用户也容易感知到一个令人烦恼的UI卡顿。为了避免那些问题,你应该在另外一个线程中执行查询的操作,等待查询操作完成,然后再显示查询结果。 6 | 7 | 通过[CursorLoader](http://developer.android.com/reference/android/support/v4/content/CursorLoader.html)对象,你可以用一种简单的方式实现异步查询,查询结束时它会和Activity进行重新连接。 8 | CursorLoader不仅仅能够实现在后台查询数据,还能够在查询数据发生变化时自动执行重新查询的操作。 9 | 10 | 这节课会介绍如何使用CursorLoader来执行一个后台查询数据的操作。在这节课中的演示代码使用的是[v4 Support Library](http://developer.android.com/tools/support-library/features.html#v4)中的类。 11 | 12 | ## Demos 13 | 14 | ** [ThreadSample](http://developer.android.com/shareables/training/ThreadSample.zip) ** 15 | 16 | ## Lessons 17 | 18 | * [使用CursorLoader执行查询任务](setup-loader.html) 19 | 20 | 学习如何使用CursorLoader在后台执行查询操作。 21 | 22 | 23 | * [处理CursorLoader查询的结果](handle-result.html) 24 | 25 | 学习如何处理从CursorLoader查询到的数据,以及在loader框架重置CursorLoader时如何解除当前Cursor的引用。 26 | -------------------------------------------------------------------------------- /contacts-provider/index.md: -------------------------------------------------------------------------------- 1 | # 联系人信息 2 | 3 | > 编写:[spencer198711](https://github.com/spencer198711) - 原文: 4 | 5 | **[Contacts Provider](http://developer.android.com/guide/topics/providers/contacts-provider.html)**是用户联系人信息的集中仓库, 它包含了来自联系人应用与社交应用的联系人数据。在我们的应用中,我们可以通过调用[**ContentResolver**](http://developer.android.com/reference/android/content/ContentResolver.html)方法或者通过发送Intent给联系人应用来访问Contacts Provider的信息。 6 | 7 | 这个章节会讲解获取联系人列表,显示指定联系人详情以及通过intent来修改联系人信息。这里介绍的基础技能能够扩展到执行更复杂的任务。另外,这个章节也会帮助我们了解Contacts Provider的整个架构与操作方法。 8 | 9 | ## Lessons 10 | 11 | [**获取联系人列表**](retrieve-names.html) 12 | 13 | 学习如何获取联系人列表。你可以使用下面的技术来筛选需要的信息: 14 | 15 | * 通过联系人名字进行筛选 16 | * 通过联系人类型进行筛选 17 | * 通过类似电话号码等指定的一类信息进行筛选。 18 | 19 | 20 | [**获取联系人详情**](retrieve-detail.html) 21 | 22 | 学习如何获取单个联系人的详情。一个联系人的详细信息包括电话号码与邮件地址等等。你可以获取所有的详细信息,也有可以只获取指定类型的详细数据,例如邮件地址。 23 | 24 | 25 | [**使用Intents修改联系人信息**](modify-data.html) 26 | 27 | 学习如何通过发送intent给联系人应用来修改联系人信息。 28 | 29 | 30 | [**显示联系人头像**](display-badge.html) 31 | 32 | 学习如何显示**QuickContactBadge**小组件。当用户点击联系人臂章(头像)组件时,会打开一个对话框,这个对话框会显示联系人详情,并提供操作按钮来处理详细信息。例如,如果联系人信息有邮件地址,这个对话框可以显示一个启动默认邮件应用的操作按钮。 33 | -------------------------------------------------------------------------------- /wearables/watch-faces/index.md: -------------------------------------------------------------------------------- 1 | # 创建表盘 2 | 3 | > 编写:[heray1990](https://github.com/heray1990) - 原文: 4 | 5 | Android Wear 的表盘是一个动态的数字画布,它用颜色、动画和相关的上下文信息来表示时间。[Android Wear companion app](https://play.google.com/store/apps/details?id=com.google.android.wearable.app) 提供了不同风格和形状的表盘。当用户选择可穿戴设备应用或者配套应用上可用的表盘,可穿戴设备会提供表盘的预览并让用户设置选项。 6 | 7 | Android Wear 允许我们为 Wear 设备创建自定义的表盘。当用户安装一个包含表盘的可穿戴应用的手持式应用时,它们可以在手持式设备上的 Android Wear 配套应用和在可穿戴设备上的表盘选择器中使用。 8 | 9 | 这个课程教我们实现自定义表盘并将它们打包进一个可穿戴应用。这节课还覆盖设计方面的考虑和实现提示,从而确保我们的设计整合到系统 UI 并且节能。 10 | 11 | > **Note:** 我们推荐使用 Android Studio 做 Android Wear 开发,它提供工程初始配置,库包含和方便的打包流程,这些在ADT中是没有的。这系列教程假定你正在使用Android Studio。 12 | 13 | ## Lesson 14 | 15 | [设计表盘](designing.html) 16 | 17 | 学习如何设计一个可以工作在 Android Wear 设备上的表盘。 18 | 19 | [构建表盘服务](service.html) 20 | 21 | 学习如何在表盘的生命周期期间响应重要的时间。 22 | 23 | [绘制表盘](drawing.html) 24 | 25 | 学习如何在一个 Wear 设备的屏幕上绘制表盘。 26 | 27 | [在表盘上显示信息](information.html) 28 | 29 | 学习如何将上下文信息集成到表盘中。 30 | 31 | [提供配置 Activity](configuration.html) 32 | 33 | 学习如何创建带有可配置参数的表盘。 34 | 35 | [定位常见的问题](issues.html) 36 | 37 | 学习如何在开发表盘的时候修改常见的问题。 38 | 39 | [优化性能和电池使用时间](performance.html) 40 | 41 | 学习如何提高动画的帧速率和节能。 -------------------------------------------------------------------------------- /basics/fragments/index.md: -------------------------------------------------------------------------------- 1 | # 使用Fragment建立动态UI 2 | 3 | > 编写:[fastcome1985] - 原文: 4 | 5 | 为了在 Android 上为用户提供动态的、多窗口的交互体验,需要将 UI 组件和 Activity 操作封装成模块进行使用,这样我们就可以在 Activity 中对这些模块进行切入切出操作。可以用 [Fragment] 创建这些模块,Fragment 就像一个嵌套的 Activity,拥有自己的布局(Layout)并管理自己的生命周期。 6 | 7 | Fragment 定义了自己的布局后,它可以在 Activity 中与其他 Fragment 生成不同的组合,从而为不同的屏幕尺寸生成不同的布局(小屏幕一次也许只能显示一个 Fragment,大屏幕则可以显示更多)。 8 | 9 | 本章将展示如何用 Fragment 创建动态界面,并在不同屏幕尺寸的设备上优化 APP 的用户体验。本章内容支持 Android 1.6 以上的设备。 10 | 11 | (完整的 Demo 示例:[FragmentBasics.zip]) 12 | 13 | ## Lessons 14 | 15 | * [**创建 Fragment**] 16 | 17 | 学习如何创建 Fragment,以及实现其生命周期内的基本功能。 18 | 19 | * [**构建有弹性的 UI**] 20 | 21 | 学习如何针对不同的屏幕尺寸用 Fragment 构建不同的布局。 22 | 23 | * [**与其他 Fragment 交互**] 24 | 25 | 学习如何在 Fragment 与 Activity 或多个 Fragment 间进行交互。 26 | 27 | 28 | [fastcome1985]: https://github.com/fastcome1985 29 | 30 | [Fragment]: //developer.android.com/intl/zh-cn/reference/android/app/Fragment.html 31 | [FragmentBasics.zip]: //developer.android.com/shareables/training/FragmentBasics.zip "FragmentBasics.zip" 32 | [**创建 Fragment**]: ./creating.html 33 | [**构建有弹性的 UI**]: ./fragment-ui.html 34 | [**与其他 Fragment 交互**]: ./communicating.html 35 | -------------------------------------------------------------------------------- /ui/system-ui/index.md: -------------------------------------------------------------------------------- 1 | # 管理系统UI 2 | 3 | > 编写:[K0ST](https://github.com/K0ST) - 原文: 4 | 5 | [System Bar](https://developer.android.com/design/get-started/ui-overview.html#system-bars)是用来展示通知、表现设备状态和完成设备导航的屏幕区域。通常上来说,系统栏(System bar)包括状态栏和导航栏(Figure 1),他们一般都是与程序同时显示在屏幕上的。而照片、视频等这类沉浸式的应用可以临时弱化系统栏图标来创造一个更加专注的体验环境,甚至可以完全隐藏系统Bar。 6 | 7 | ![](system-ui.png) 8 | 9 | Figure 1. System bars,包含[1]状态栏,和[2]导航栏。 10 | 11 | 如果你对[Android Design Guide](http://developer.android.com/design/index.html)很熟悉,你应该已经知道遵照标准的Android UI Guideline与遵循模式来设计App的重要性。在你修改系统栏之前,你应该仔细的考虑一下用户的需求与预期,因为它们是操作设备和观察设备状态的的常规途径。 12 | 13 | 这节课描述了如何在不同版本的Android上隐藏或淡化系统栏,来营造一个沉浸式的用户体验,同时做到快速的访问与操作系统栏。 14 | 15 | ## Sample 16 | 17 | **ImmersiveMode** - 19 | 20 | ## Lessons 21 | 22 | * [**淡化系统栏**](dim.md) 23 | 24 | 学习如何淡化和隐藏状态栏与导航栏。 25 | 26 | 27 | * [**隐藏状态栏**](hide-ui.md) 28 | 29 | 学习如何在不同版本的Android上隐藏状态栏。 30 | 31 | 32 | * [**隐藏导航栏**](hide-nav.md) 33 | 34 | 学习如何隐藏导航栏。 35 | 36 | 37 | * [**全屏沉浸式应用**](immersive.md) 38 | 39 | 学习如何在你的App中创建沉浸模式。 40 | 41 | 42 | * [**响应UI可见性的变化**](visibility.md) 43 | 44 | 学习如何注册一个监听器来监听系统UI可见性的变化,以便于相应的调整App的UI。 45 | -------------------------------------------------------------------------------- /material/index.md: -------------------------------------------------------------------------------- 1 | # 创建使用Material Design的应用 2 | 3 | > 编写: [allenlsy](https://github.com/allenlsy) - 原文: 4 | 5 | Material Design 是一个全面的关于视觉,动作和交互的指南,实现跨平台的设计。要在你的 Android 应用中使用 Material Design, 你需要遵从 [Material Design](http://www.google.com/design/spec/material-design/introduction.html) 规格文档,来使用 Android 5.0 中新添加的组件和功能。 6 | 7 | 本课会通过以下方面教你如何创建 Material Design 设计的应用: 8 | 9 | * Material Design 主题 10 | * 用于卡片和列表的小组件 11 | * 定义Shadows与Clipping视图 12 | * 矢量 drawable 13 | * 自定义动画 14 | 15 | 本课还将告诉你在使用 Material Design 时如何兼容 Android 5.0 (API level 21) 之前的版本。 16 | 17 | # 课程 18 | 19 | #### [ 开始使用Material Design ](get-started.md) 20 | 21 | 学习如何升级应用,使用 Material Design 特性 22 | 23 | #### [ 使用 Material Design 主题 ](theme.md) 24 | 25 | 学习如何使用 Material Design 主题 26 | 27 | #### [ 用于卡片和列表的小组件 ](lists-cards.md) 28 | 29 | 学习如何创建列表和卡片视图,使得应用和其他系统组件风格统一 30 | 31 | #### [ 定义Shadows与Clipping视图 ](shadows-clipping.md) 32 | 33 | 学习如何设置 evaluation 来自定义阴影,以及创建 Clipping 视图 34 | 35 | #### [ 使用 Drawables ](drawables.md) 36 | 37 | 学习如何创建矢量 Drawable 以及如何给 drawable 资源着色 38 | 39 | #### [ 自定义动画 ](animations.md) 40 | 41 | 学习如何为视图和 Activity 切换创建自定义动画 42 | 43 | #### [ 维护兼容性 ](compatibility.md) 44 | 45 | 学习如何兼容 Android 5.0 以下的版本 46 | -------------------------------------------------------------------------------- /ux/notify-user/index.md: -------------------------------------------------------------------------------- 1 | # 通知提示用户 2 | 3 | > 编写:[fastcome1985](https://github.com/fastcome1985) - 原文: 4 | 5 | * Notification是一种在你APP常规UI外展示、用来指示某个事件发生的用户交互元素。用户可以在使用其它apps时查看notification,并在方便的时候做出回应。 6 | 7 | * [Notification设计指导](developer.android.com/design/patterns/notifications.html)向你展示如何设计实用的notifications以及何时使用它们。这节课将会教你实现大多数常用的notification设计。 8 | 9 | * 完整的Demo示例:[NotifyUser.zip](developer.android.com/shareables/training/NotifyUser.zip) 10 | 11 | ## Lessons 12 | 13 | * [建立一个Notification](build-notification.md) 14 | 15 | 学习如何创建一个notification [Builder](developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html),设置需要的特征,以及发布notification。 16 | 17 | 18 | * [当Activity启动时保留导航](nav.md) 19 | 20 | 学习如何为一个从notification启动的[Activity](http://developer.android.com/intl/zh-cn/reference/android/app/Activity.html)执行适当的导航。 21 | 22 | 23 | * [更新notifications](update-notification.md) 24 | 25 | 学习如何更新与移除notifications 26 | 27 | 28 | * [使用BigView风格](expand-notification.md) 29 | 30 | 学习用扩展的notification来创建一个BigView,并且维持老版本的兼容性。 31 | 32 | 33 | * [显示notification进度](progess-notification.md) 34 | 35 | 学习在notification中显示某个操作的进度,既可以用于那些你可以估算已经完成多少(确定进度,determinate)的操作,也可以用于那些你无法知道完成了多少(不确定进度,indefinite )的操作 36 | -------------------------------------------------------------------------------- /performance/monitor-device-state/manifest-receivers.md: -------------------------------------------------------------------------------- 1 | # 按需操控BroadcastReceiver 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 监测设备状态变化最简单的方法,是为你所要监听的每一个状态创建一个[BroadcastReceiver](http://developer.android.com/reference/android/content/BroadcastReceiver.html),并在Manifest文件中注册它们。之后就可以在每一个BroadcastReceiver中,根据当前设备的状态调整一些计划任务。 6 | 7 | 上述方法的副作用是:一旦你的接收器收到了广播,应用就会唤醒设备。唤醒的频率可能会远高于需要的频率 8 | 9 | 更好的方法是在程序运行时开启或者关闭BroadcastReceiver。这样的话,你就可以让这些接收器仅在需要的时候被激活。 10 | 11 | ## 切换是否开启接收器以提高效率 12 | 13 | 我们可以使用[PackageManager](http://developer.android.com/reference/android/content/pm/PackageManager.html)来切换任何一个在Mainfest里面定义好的组件的开启状态。通过下面的方法可以开启或者关闭任何一个BroadcastReceiver: 14 | 15 | ```java 16 | ComponentName receiver = new ComponentName(context, myReceiver.class); 17 | 18 | PackageManager pm = context.getPackageManager(); 19 | 20 | pm.setComponentEnabledSetting(receiver, 21 | PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 22 | PackageManager.DONT_KILL_APP) 23 | ``` 24 | 25 | 使用这种技术,如果我们确定网络连接已经断开,那么可以在这个时候关闭除了监听网络状态变化的接收器之外的其它所有接收器。 26 | 27 | 相反的,一旦重新建立网络连接,我们可以停止监听网络连接的改变,而仅仅在执行需要联网的操作之前判断当前网络是否可以用。 28 | 29 | 同样地,你可以使用上面的技术来暂缓一个需要更高带宽的下载任务。这仅需要启用一个监听网络连接变化的BroadcastReceiver,并在连接到Wi-Fi时,初始化下载任务。 30 | -------------------------------------------------------------------------------- /gitbook/plugins/gitbook-plugin-disqus/plugin.js: -------------------------------------------------------------------------------- 1 | require(["gitbook", "jQuery"], function(gitbook, $) { 2 | var resetDisqus = function() { 3 | var $disqusDiv = $("
", { 4 | "id": "disqus_thread" 5 | }); 6 | $(".book-body .page-inner").append($disqusDiv); 7 | 8 | if (typeof DISQUS !== "undefined") { 9 | DISQUS.reset({ 10 | reload: true, 11 | config: function () { 12 | this.language = "en"; 13 | this.page.url = window.location.href; 14 | } 15 | }); 16 | } 17 | } 18 | 19 | gitbook.events.bind("start", function(e, config) { 20 | config.disqus = config.disqus || {}; 21 | var disqus_shortname = config.disqus.shortName; 22 | 23 | /* * * DON'T EDIT BELOW THIS LINE * * */ 24 | (function() { 25 | var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; 26 | dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; 27 | (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); 28 | })(); 29 | 30 | resetDisqus(); 31 | }); 32 | 33 | gitbook.events.bind("page.change", resetDisqus); 34 | }); -------------------------------------------------------------------------------- /basics/activity-lifecycle/index.md: -------------------------------------------------------------------------------- 1 | # 管理Activity的生命周期 2 | 3 | > 原文: 4 | 5 | 当用户导航、退出和返回您的应用时,应用中的 [Activity](http://developer.android.com/reference/android/app/Activity.html) 实例将在其生命周期中转换不同状态。 例如,当您的Activity初次开始时,它将出现在系统前台并接收用户焦点。 在这个过程中,Android 系统会对Activity调用一系列生命周期方法,通过这些方法,您可以设置用户界面和其他组件。 如果用户执行开始另一Activity或切换至另一应用的操作,当其进入后台(在其中Activity不再可见,但实例及其状态完整保留),系统会对您的Activity调用另外一系列生命周期方法。 6 | 7 | 在生命周期回调方法内,您可以声明用户离开和再次进入Activity时的Activity行为。比如,如果您正构建流视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。 8 | 9 | 本课讲述每个 [Activity](http://developer.android.com/reference/android/app/Activity.html) 实例接收的重要生命周期回调方法以及您如何使用这些方法以使您的Activity按照用户预期进行并且当您的Activity不需要它们时不会消耗系统资源。 10 | 11 | **完整的Demo示例**:[ActivityLifecycle.zip](http://developer.android.com/shareables/training/ActivityLifecycle.zip) 12 | 13 | 14 | 15 | ## Lessons 16 | 17 | * [**启动与销毁Activity**](starting.html) 18 | 19 | 学习有关Activity生命周期、用户如何启动您的应用以及如何执行基本Activity创建操作的基础知识。 20 | 21 | 22 | * [**暂停与恢复Activity**](pausing.html) 23 | 24 | 学习Activity暂停时(部分隐藏)和继续时的情况以及您应在这些状态变化期间执行的操作。 25 | 26 | 27 | * [**停止与重启Activity**](stopping.html) 28 | 29 | 学习用户完全离开您的Activity并返回到该Activity时发生的情况。 30 | 31 | 32 | * [**重新创建Activity**](recreating.html) 33 | 34 | 学习您的Activity被销毁时的情况以及您如何能够根据需要重新构建Activity。 35 | -------------------------------------------------------------------------------- /manifest.appcache: -------------------------------------------------------------------------------- 1 | CACHE MANIFEST 2 | # Revision 1407253957629 3 | 4 | CACHE: 5 | gitbook/app.js 6 | gitbook/fonts/fontawesome/FontAwesome.otf 7 | gitbook/fonts/fontawesome/fontawesome-webfont.eot 8 | gitbook/fonts/fontawesome/fontawesome-webfont.svg 9 | gitbook/fonts/fontawesome/fontawesome-webfont.ttf 10 | gitbook/fonts/fontawesome/fontawesome-webfont.woff 11 | gitbook/fonts/merriweather/250.woff 12 | gitbook/fonts/merriweather/250i.woff 13 | gitbook/fonts/merriweather/400.woff 14 | gitbook/fonts/merriweather/400i.woff 15 | gitbook/fonts/merriweather/700.woff 16 | gitbook/fonts/merriweather/700i.woff 17 | gitbook/fonts/merriweather/900.woff 18 | gitbook/fonts/merriweather/900i.woff 19 | gitbook/fonts/opensans/300.woff 20 | gitbook/fonts/opensans/300i.woff 21 | gitbook/fonts/opensans/400.woff 22 | gitbook/fonts/opensans/400i.woff 23 | gitbook/fonts/opensans/600.woff 24 | gitbook/fonts/opensans/600i.woff 25 | gitbook/fonts/opensans/700.woff 26 | gitbook/fonts/opensans/700i.woff 27 | gitbook/images/favicon.ico 28 | gitbook/jsrepl/engines/javascript-default.js 29 | gitbook/jsrepl/jsrepl.js 30 | gitbook/jsrepl/langs/javascript/jsrepl_js.js 31 | gitbook/jsrepl/sandbox.html 32 | gitbook/jsrepl/sandbox.js 33 | gitbook/print.css 34 | gitbook/style.css 35 | gitbook/plugins/gitbook-plugin-disqus/plugin.js 36 | gitbook/plugins/gitbook-plugin-mathjax/plugin.js 37 | 38 | NETWORK: 39 | * -------------------------------------------------------------------------------- /ux/implement-nav/index.md: -------------------------------------------------------------------------------- 1 | # 实现高效的导航 2 | 3 | > 编写:[Lin-H](https://github.com/Lin-H) - 原文: 4 | 5 | 这节课将会演示如何实现在[Designing Effective Navigation](http://developer.android.com/training/design-navigation/index.html)中所详述的关键导航设计模式。 6 | 7 | 在阅读这节课程内容之后,你会对如何使用tabs, swipe views, 和navigation drawer实现导航模式有一个深刻的理解。也会明白如何提供合适的向前向后导航(Up and Back navigation)。 8 | 9 | > **Note**:本节课中的几个元素需要使用[Support Library](http://developer.android.com/tools/support-library/index.html) API。如果你之前没有使用过Support Library,可以按照[Support Library Setup](http://developer.android.com/tools/support-library/setup.html)文档说明来使用。 10 | 11 | ## Sample Code 12 | 13 | [EffectiveNavigation.zip](http://developer.android.com/shareables/training/EffectiveNavigation.zip) 14 | 15 | ## Lessons 16 | 17 | * [使用Tabs创建Swipe View](lateral.md) 18 | 19 | 学习如何在action bar中实现tab,并提供横向分页(swipe views)在tab之间导航切换。 20 | 21 | 22 | * [创建抽屉导航(Navigation Drawer)](nav-drawer.md) 23 | 24 | 学习如何建立隐藏于屏幕边上的界面,通过划屏(swipe)或点击action bar中的app图标来显示这个界面。 25 | 26 | 27 | * [提供向上导航](ancestral.md) 28 | 29 | 学习如何使用action bar中的app图标实现向上导航 30 | 31 | 32 | * [提供适当的向后导航](temporal.md) 33 | 34 | 学习如何正确处理特殊情况下的向后按钮(Back button),包括在通知或app widget中的深度链接,如何将activity插入后退栈(back stack)中。 35 | 36 | 37 | * [实现Descendant Navigation](descendant.md) 38 | 39 | 学习更精细地导航进入你的应用信息层。 40 | 41 | -------------------------------------------------------------------------------- /ui/system-ui/visibility.md: -------------------------------------------------------------------------------- 1 | # 响应UI可见性的变化 2 | 3 | > 编写:[K0ST](https://github.com/K0ST) - 原文: 4 | 5 | 本节课将教你如果注册监听器来监听系统UI可见性的变化。这个方法在将系统栏与你自己的UI控件进行同步操作时很有用。 6 | 7 | ## 注册监听器 8 | 9 | 为了获取系统UI可见性变化的通知,我们需要对View注册`View.OnSystemUiVisibilityChangeListener`监听器。通常上来说,这个View是用来控制导航的可见性的。 10 | 11 | 例如你可以添加如下代码在onCreate中 12 | 13 | ```java 14 | View decorView = getWindow().getDecorView(); 15 | decorView.setOnSystemUiVisibilityChangeListener 16 | (new View.OnSystemUiVisibilityChangeListener() { 17 | @Override 18 | public void onSystemUiVisibilityChange(int visibility) { 19 | // Note that system bars will only be "visible" if none of the 20 | // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set. 21 | if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 22 | // TODO: The system bars are visible. Make any desired 23 | // adjustments to your UI, such as showing the action bar or 24 | // other navigational controls. 25 | } else { 26 | // TODO: The system bars are NOT visible. Make any desired 27 | // adjustments to your UI, such as hiding the action bar or 28 | // other navigational controls. 29 | } 30 | } 31 | }); 32 | ``` 33 | 34 | 保持系统栏和UI同步是一种很好的实践方式,比如当状态栏显示或隐藏的时候进行ActionBar的显示和隐藏等等。 35 | -------------------------------------------------------------------------------- /background-jobs/run-background-service/send-request.md: -------------------------------------------------------------------------------- 1 | # 向后台服务发送任务请求 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 前一篇文章演示了如何创建一个IntentService类。这次会演示如何通过发送一个Intent来触发IntentService执行任务。这个Intent可以传递一些数据给IntentService。我们可以在Activity或者Fragment的任何时间点发送这个Intent。 6 | 7 | ## 创建任务请求并发送到IntentService 8 | 9 | 为了创建一个任务请求并发送到IntentService。需要先创建一个显式Intent,并将请求数据添加到intent中,然后通过调用 10 | `startService()` 方法把任务请求数据发送到IntentService。 11 | 12 | 下面的是代码示例: 13 | 14 | * 创建一个新的显式Intent用来启动IntentService。 15 | 16 | ```java 17 | /* 18 | * Creates a new Intent to start the RSSPullService 19 | * IntentService. Passes a URI in the 20 | * Intent's "data" field. 21 | */ 22 | mServiceIntent = new Intent(getActivity(), RSSPullService.class); 23 | mServiceIntent.setData(Uri.parse(dataUrl)); 24 | ``` 25 | 26 | 27 | 28 | * 执行`startService()` 29 | 30 | ```java 31 | // Starts the IntentService 32 | getActivity().startService(mServiceIntent); 33 | ``` 34 | 35 | 注意可以在Activity或者Fragment的任何位置发送任务请求。例如,如果你先获取用户输入,您可以从响应按钮单击或类似手势的回调方法里面发送任务请求。 36 | 37 | 一旦执行了startService(),IntentService在自己本身的`onHandleIntent()`方法里面开始执行这个任务,任务结束之后,会自动停止这个Service。 38 | 39 | 下一步是如何把工作任务的执行结果返回给发送任务的Activity或者Fragment。下节课会演示如何使用[BroadcastReceiver](http://developer.android.com/reference/android/content/BroadcastReceiver.html)来完成这个任务。 40 | -------------------------------------------------------------------------------- /input/gestures/index.md: -------------------------------------------------------------------------------- 1 | # 使用触摸手势 2 | 3 | > 编写:[Andrwyw](https://github.com/Andrwyw) - 原文: 4 | 5 | 本章节讲述,如何编写一个允许用户通过触摸手势进行交互的app。Android提供了各种各样的API,来帮助我们创建和检测手势。 6 | 7 | 尽管对于一些基本的操作来说,我们的app不应该依赖于触摸手势(因为某些情况下手势是不用的)。但为我们的app添加基于触摸的交互,将会大大地提高app的可用性和吸引力。 8 | 9 | 为了给用户提供一致的、符合直觉的使用体验,我们的app应该遵守Android触摸手势的惯常做法。[手势设计指南](http://developer.android.com/design/patterns/gestures.html)介绍了在Android app中,如何使用常用的手势。同样,设计指南也提供了[触摸反馈](http://developer.android.com/design/style/touch-feedback.html)的相关内容。 10 | 11 | ## Lessons 12 | 13 | [**检测常用的手势**](detector.html) 14 | 15 | 学习如何通过使用[GestureDetector](http://developer.android.com/reference/android/view/GestureDetector.html)来检测基本的触摸手势,如滑动、惯性滑动以及双击。 16 | 17 | 18 | [**追踪手势移动**](movement.html) 19 | 20 | 学习如何追踪手势移动。 21 | 22 | 23 | [**Scroll手势动画**](scroll.html) 24 | 25 | 学习如何使用scrollers([Scrollers](http://developer.android.com/reference/android/widget/Scroller.html)以及[OverScroll](http://developer.android.com/reference/android/widget/OverScroller.html))来产生滚动动画,以响应触摸事件。 26 | 27 | 28 | [**处理多触摸手势**](multi.html) 29 | 30 | 学习如何检测多点(手指)触摸手势。 31 | 32 | 33 | [**拖拽与缩放**](scale.html) 34 | 35 | 学习如何实现基于触摸的拖拽与缩放。 36 | 37 | 38 | [**管理ViewGroup中的触摸事件**](viewgroup.html) 39 | 40 | 学习如何在[ViewGroup](http://developer.android.com/reference/android/view/ViewGroup.html)中管理触摸事件,以确保事件能被正确地分发到目标views上。 41 | -------------------------------------------------------------------------------- /wearables/apps/bt-debugging.md: -------------------------------------------------------------------------------- 1 | # 通过蓝牙进行调试 2 | 3 | > 编写: [kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 我们可以通过蓝牙来调试我们的可穿戴应用。即通过蓝牙把调试数据输出到已经连接了开发电脑的手持设备上。 6 | 7 | ## 搭建好设备用来调试 8 | 9 | 1. 开启手持设备的USB调试: 10 | * 打开设置应用并滑动到底部。 11 | * 如果在设置里面没有开发者选项,点击**关于手机**(或者**关于平板**),滑动到底部,点击build number 7次。 12 | * 返回并点击**开发者选项**。 13 | * 开启**USB调试**。 14 | 2. 开启可穿戴设备的蓝牙调试: 15 | * 点击主界面2次,来到Wear菜单界面。 16 | * 滑动到底部,点击**设置**。 17 | * 滑动到底部,如果没有**开发者选项**,点击**关于**,然后点击Build Number 7次。 18 | * 点击**开发者选项**。 19 | * 开启**蓝牙调试**。 20 | 21 | ## 建立调试会话 22 | 23 | 1. 在手持设备上,打开`Android Wear`配套应用。 24 | 2. 点击右上角的菜单,选择**设置**。 25 | 3. 开启**蓝牙调试**。我们将会在选项下面看到一个小的状态信息: 26 | ```xml 27 | Host: disconnected 28 | Target: connected 29 | ``` 30 | 4. 通过USB连接手持设备到电脑上,并执行下面的命令: 31 | ```xml 32 | adb forward tcp:4444 localabstract:/adb-hub 33 | adb connect localhost:4444 34 | ``` 35 | > **Note:** 我们可以使用任何可用的端口。 36 | 37 | 在`Android Wear`配套应用上,我们将会看到状态变为: 38 | ```xml 39 | Host: connected 40 | Target: connected 41 | ``` 42 | 43 | ## 调试应用 44 | 45 | 当运行`abd devices`的命令时,我们的可穿戴设备应该表示为localhost:4444。执行任何的`adb`命令,需要使用下面的格式: 46 | 47 | ```xml 48 | adb -s localhost:4444 49 | ``` 50 | 51 | 如果没有任何其他的设备通过TCP/IP连接到手持设备(即模拟器),我们可以使用下面的简短命令: 52 | 53 | ```xml 54 | adb -e 55 | ``` 56 | 57 | 例如: 58 | 59 | ```xml 60 | adb -e logcat 61 | adb -e shell 62 | adb -e bugreport 63 | ``` 64 | -------------------------------------------------------------------------------- /connectivity/network-ops/index.md: -------------------------------------------------------------------------------- 1 | # 执行网络操作 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | 这一章会介绍一些基本的网络操作,涉及到网络连接、监视网络连接(包括网络改变)和让用户控制 app 的网络用途。还会介绍如何解析与使用 XML 数据。 6 | 7 | 这节课包括一个示例应用,展示如何执行常见的网络操作。我们可以下载下面的的范例,并把它作为可重用代码在自己的应用中使用。 8 | 9 | [NetworkUsage.zip](http://developer.android.com/shareables/training/NetworkUsage.zip) 10 | 11 | 通过学习这章节的课程,我们将会学习到一些有关于如何创建一个使用最少的网络流量下载并解析数据的高效 app 的基础知识。 12 | 13 | 你还可以参考下面文章进阶学习: 14 | 15 | * [Optimizing Battery Life](performance/monitoring-device-state/index.html) 16 | * [Transferring Data Without Draining the Battery](connectivity/efficient-downloads/index.html) 17 | * [Web Apps Overview](http://developer.android.com/guide/webapps/index.html) 18 | * [Transmitting Network Data Using Volley](connectivity/volley/index.md) 19 | 20 | > **Node:** 查看[使用 Volley 传输网络数据](connectivity/volley/index.md)课程获取 Volley 的相关信息,它是一个能帮助 Android apps 更方便快捷地执行网络操作的 HTTP 库。Volly 可以在开源 [AOSP](https://android.googlesource.com/platform/frameworks/volley) 库中找到。Volly 可能会帮助我们简化网络操作,提高我们 app 的网络操作性能。 21 | 22 | ## Lessons 23 | 24 | [连接到网络 - Connecting to the Network](connecting.html) 25 | 26 | 学习如何连接到网络,选择一个 HTTP client,以及在 UI 线程外执行网络操作。 27 | 28 | 29 | [管理网络的使用情况 - Managing Network Usage](managing.html) 30 | 31 | 学习如何检查设备的网络连接情况,创建偏好界面来控制网络使用,以及响应连接变化。 32 | 33 | 34 | [解析 XML 数据 - Parsing XML Data](xml.html) 35 | 36 | 学习如何解析和使用 XML 数据。 37 | -------------------------------------------------------------------------------- /best-ux.md: -------------------------------------------------------------------------------- 1 | # Android交互设计 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | These classes focus on the best Android user experience for your app. In some cases, the success of your app on Android is heavily affected by whether your app conforms to the user's expectations for UI and navigation on an Android device. Follow these recommendations to ensure that your app looks and behaves in a way that satisfies Android users. 6 | 7 | #### [Designing Effective Navigation](ux/design-nav/index.html) 8 | 9 | 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. 10 | 11 | #### [Implementing Effective Navigation](ux/implement-nav/index.html) 12 | 13 | How to implement various navigation patterns such as swipe views, a navigation drawer, and up navigation. 14 | 15 | #### [Notifying the User](ux/notify-user/index.html) 16 | 17 | How to display messages called notifications outside of your application's UI. 18 | 19 | #### [Adding Search Functionality](ux/search/index.html) 20 | 21 | How to properly add a search interface to your app and create a searchable database. 22 | 23 | ### [Making Your App Content Searchable by Google](ux/app-indexing/index.html) 24 | 25 | How to enable deep linking and indexing of your application content so that users can open this content directly from their mobile search results. 26 | -------------------------------------------------------------------------------- /location/index.md: -------------------------------------------------------------------------------- 1 | # Android位置信息 2 | 3 | > 编写:[penkzhou](https://github.com/penkzhou) - 原文: 4 | 5 | 位置感知是移动应用一个独特的功能。用户去到哪里都会带着他们的移动设备,而将位置感知功能添加到我们的应用里,可以让用户有更加真实的情境体验。位置服务API集成在Google Play服务里面,这便于我们将自动位置跟踪、地理围栏和用户活动识别等位置感知功能添加到我们的应用当中。 6 | 7 | 我们喜欢用[Google Play services location APIs](http://developer.android.com/reference/com/google/android/gms/location/package-summary.html)胜过Android framework location APIs ([android.location](http://developer.android.com/reference/android/location/package-summary.html)) 来给我们的应用添加位置感知功能。如果你现在正在使用Android framework location APIs,我们强烈建议你尽可能切换到Google Play services location APIs。 8 | 9 | 这个课程介绍如何使用Google Play services location APIs来获取当前位置、周期性地更新位置以及查找地址。创建并监视地理围栏以及探测用户的活动。这个课程包括示例应用和代码片段,你可以利用这些资源作为添加位置感知到你的应用的基础。 10 | 11 | > **Note:**因为这个课程基于Google Play services client library,所以在使用这些示例应用和代码段之前确保你安装了最新版本的Google Play services client library。要想学习如何安装最新版的client library,请参考[安装Google Play services向导](http://developer.android.com/google/play-services/setup.html)。 12 | 13 | ## Lessons 14 | 15 | * [**获取最后可知位置**](retrieve-current.html) 16 | 17 | 学习如何获取Android设备的最后可知位置。通常Android设备的最后可知位置相当于用户的当前位置。 18 | 19 | 20 | * [**接收位置更新**](receive-location-updates.html) 21 | 22 | 学习如何请求和接收周期性的位置更新。 23 | 24 | 25 | * [**显示位置地址**](display-address.html) 26 | 27 | 学习如何将一个位置的经纬度转化成一个地址(反向地理编码)。 28 | 29 | 30 | * [**创建和监视地理围栏**](geofencing.html) 31 | 32 | 学习如何将一个或多个地理区域定义成一个兴趣位置集合,称为地理围栏。学习如何探测用户靠近或者进入地理围栏事件。 33 | -------------------------------------------------------------------------------- /best-ui.md: -------------------------------------------------------------------------------- 1 | # Android界面设计 2 | 3 | These classes teach you how to build a user interface using Android layouts for all types of devices. Android provides a flexible framework for UI design that allows your app to display different layouts for different devices, create custom UI widgets, and even control aspects of the system UI outside your app's window. 4 | 5 | #### [Designing for Multiple Screens](ui/multiscreen/index.html) 6 | 7 | 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. 8 | 9 | #### [Creating Custom Views](ui/custom-view/index.html) 10 | 11 | How to build custom UI widgets that are interactive and smooth. 12 | 13 | #### [Creating Backward-Compatible UIs](ui/backward-compatible-ui/index.html) 14 | 15 | How to use UI components and other APIs from the more recent versions of Android while remaining compatible with older versions of the platform. 16 | 17 | #### [Implementing Accessibility](ui/accessibility/index.html) 18 | 19 | How to make your app accessible to users with vision impairment or other physical disabilities. 20 | 21 | #### [Managing the System UI](ui/system-ui/index.html) 22 | 23 | How to hide and show status and navigation bars across different versions of Android, while managing the display of other screen components. 24 | 25 | ### [Creating Apps with Material Design](../material/index.html) 26 | 27 | How to implement material design on Android. 28 | -------------------------------------------------------------------------------- /ui/custom-view/index.md: -------------------------------------------------------------------------------- 1 | # 创建自定义View 2 | 3 | > 编写:[kesenhoo](https://github.com/kesenhoo) - 原文: 4 | 5 | Android的framework有大量的Views用来与用户进行交互并显示不同种类的数据。但是有时候你的程序有个特殊的需求,而Android内置的views组件并不能实现。这一章节会演示如何创建你自己的views,并使得它们是robust与reusable的。 6 | 7 | **依赖和要求** 8 | 9 | Android 2.1 (API level 7) 或更高 10 | 11 | **你也可以看** 12 | 13 | * [Custom Components](http://developer.android.com/guide/topics/ui/custom-components.html) 14 | * [Input Events](http://developer.android.com/guide/topics/ui/ui-events.html) 15 | * [Property Animation](http://developer.android.com/guide/topics/graphics/prop-animation.html) 16 | * [Hardware Acceleration](http://developer.android.com/guide/topics/graphics/hardware-accel.html) 17 | * [Accessibility](http://developer.android.com/guide/topics/ui/accessibility/index.html) developer guide 18 | 19 | ## Sample 20 | 21 | [CustomView.zip](http://developer.android.com/shareables/training/CustomView.zip) 22 | 23 | 24 | 25 | ##Lesson 26 | 27 | * [**创建一个View类**](create-view.md) 28 | 29 | 创建一个像内置的view,有自定义属性并支持[ADT](http://developer.android.com/sdk/eclipse-adt.html) layout编辑器。 30 | 31 | * [**自定义Drawing**](custom-draw.md) 32 | 33 | 使用Android graphics系统使你的view拥有独特的视觉效果。 34 | 35 | * [**使得View是可交互的**](make-interactive.md) 36 | 37 | 用户期望view对操作反应流畅自然。这节课会讨论如何使用gesture detection, physics, 和 animation使你的用户界面有专业的水准。 38 | 39 | * [**优化View**](optimize-view.md) 40 | 41 | 不管你的UI如何的漂亮,如果不能以高帧率流畅运行,用户也不会喜欢。学习如何避免一般的性能问题,和如何使用硬件加速来使你的自定义图像运行更流畅。 42 | 43 | -------------------------------------------------------------------------------- /gitbook/print.css: -------------------------------------------------------------------------------- 1 | .link-inherit{color:inherit}.link-inherit:hover,.link-inherit:focus{color:inherit}.hljs-comment,.hljs-title{color:#8e908c}.hljs-variable,.hljs-attribute,.hljs-tag,.hljs-regexp,.ruby .hljs-constant,.xml .hljs-tag .hljs-title,.xml .hljs-pi,.xml .hljs-doctype,.html .hljs-doctype,.css .hljs-id,.css .hljs-class,.css .hljs-pseudo{color:#c82829}.hljs-number,.hljs-preprocessor,.hljs-pragma,.hljs-built_in,.hljs-literal,.hljs-params,.hljs-constant{color:#f5871f}.ruby .hljs-class .hljs-title,.css .hljs-rules .hljs-attribute{color:#eab700}.hljs-string,.hljs-value,.hljs-inheritance,.hljs-header,.ruby .hljs-symbol,.xml .hljs-cdata{color:#718c00}.css .hljs-hexcolor{color:#3e999f}.hljs-function,.python .hljs-decorator,.python .hljs-title,.ruby .hljs-function .hljs-title,.ruby .hljs-title .hljs-keyword,.perl .hljs-sub,.javascript .hljs-title,.coffeescript .hljs-title{color:#4271ae}.hljs-keyword,.javascript .hljs-function{color:#8959a8}.hljs{display:block;background:white;color:#4d4d4c;padding:.5em}.coffeescript .javascript,.javascript .xml,.tex .hljs-formula,.xml .javascript,.xml .vbscript,.xml .css,.xml .hljs-cdata{opacity:.5}.book-chapter{display:none}pre,blockquote{border:1px solid #999;page-break-inside:avoid;background:#f1f1f1;padding:8px}img{max-width:100%!important;page-break-inside:avoid;margin:0 auto}.exercise,.quiz{margin:1cm 0;padding:.4cm;page-break-inside:avoid;border:3px solid #ddd}.exercise .exercise-header,.quiz .exercise-header{margin-bottom:.4cm;padding-bottom:.2cm;border-bottom:1px solid #ddd}.exercise .question,.quiz .question{margin-top:.4cm} -------------------------------------------------------------------------------- /performance/improving-layouts/loading-ondemand.md: -------------------------------------------------------------------------------- 1 | # 按需加载视图 2 | 3 | > 编写:[allenlsy](https://github.com/allenlsy) - 原文: 4 | 5 | 有时你的 Layout 会用到不怎么重用的复杂视图。不管它是列表项 细节,进度显示器,或是撤销时的提示信息,你可以仅在需要的时候载入它们,提高 UI 渲染速度。 6 | 7 | ## 定义 ViewStub 8 | 9 | [ViewStub](http://developer.android.com/reference/android/view/ViewStub.html) 是一个轻量的视图,不需要大小信息,也不会在被加入的 Layout 中绘制任何东西。每个 ViewStub 只需要设置 `android:layout` 属性来指定需要被 inflate 的 Layout 类型。 10 | 11 | 以下 ViewStub 是一个半透明的进度条覆盖层。功能上讲,它应该只在新的数据项被导入到应用程序时可见。 12 | 13 | ```xml 14 | 21 | ``` 22 | 23 | ## 载入 ViewStub Layout 24 | 25 | 当你要载入用 ViewStub 声明的 Layout 时,要么用 `setVisibility(View.VISIBLE)` 设置它的可见性,要么调用其 `inflate()` 方法。 26 | 27 | ```java 28 | ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 29 | // or 30 | View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate(); 31 | ``` 32 | 33 | > **Notes**:`inflate()` 方法会在渲染完成后返回被 inflate 的视图,所以如果你需要和这个 Layout 交互的话, 你不需要再调用 `findViewById()` 去查找这个元素,。 34 | 35 | 一旦 ViewStub 可见或是被 inflate 了,ViewStub 就不再继续存在View的层级机构中了。取而代之的是被 inflate 的 Layout,其 id 是 ViewStub 上的 `android:inflatedId` 属性。(ViewStub 的 `android:id` 属性仅在 ViewStub 可见以前可用) 36 | 37 | > **Notes**:ViewStub 的一个缺陷是,它目前不支持使用 `` 标签的 Layout 。 38 | -------------------------------------------------------------------------------- /graphics/opengl/index.md: -------------------------------------------------------------------------------- 1 | # 使用OpenGL ES显示图像 2 | 3 | > 编写:[jdneo](https://github.com/jdneo) - 原文: 4 | 5 | Android framework 提供了大量的标准视图工具,用来创建吸引人的,功能丰富的图形界面。然而,如果我们希望应用能够对屏幕上所绘制的内容进行更多的控制,或者是希望绘制3D图像,那么我们就需要一个不同的工具了。由 Android framework 提供的 OpenGL ES 接口给予我们一组可以显示高级动画和图形的工具集,它能够完成超越我们想象力的复杂多变的图形绘制。同时,这些绘制操作在绝大多数的 Android 设备上,都能够利用设备自身装载的图形处理单元(GPU)为其提供更好的性能。 6 | 7 | 这系列课程将展示如何使用 OpenGL 构建应用的基础知识,包括配置启动,绘制对象,移动图形元素以及响应点击事件。 8 | 9 | 这系列课程所涉及的样例代码使用的是 OpenGL ES 2.0 接口,这是当前Android设备所推荐的接口版本。关于更多OpenGL ES的版本信息,可以阅读:[OpenGL开发手册](http://developer.android.com/guide/topics/graphics/opengl.html#choosing-version)。 10 | 11 | > **Note:**注意不要把OpenGL ES 1.x版本的接口和OpenGL ES 2.0的接口混合调用。这两种版本的接口不是通用的。如果尝试混用它们可能会让你感到无奈和沮丧。 12 | 13 | ## Sample Code 14 | 15 | [OpenGLES.zip](http://developer.android.com/shareables/training/OpenGLES.zip) 16 | 17 | ## Lessons 18 | 19 | * [**配置OpenGL ES的环境(Building an OpenGL ES Environment)**](environment.html) 20 | 21 | 学习如何配置一个可以绘制 OpenGL 图形的 Android 应用。 22 | 23 | 24 | * [**定义形状(Defining Shapes)**](shapes.html) 25 | 26 | 学习如何定义形状,以及为何需要了解面(Faces)和卷绕(Winding)这两个概念的原因。 27 | 28 | 29 | * [**绘制形状(Drawing Shapes)**](draw.html) 30 | 31 | 学习如何在应用中利用OpenGL绘制形状。 32 | 33 | 34 | * [**运用投影与相机视角(Applying Projection and Camera Views)**](projection.html) 35 | 36 | 学习如何通过投影和相机视角,获取图形对象的一个新的透视效果。 37 | 38 | 39 | * [**添加移动(Adding Motion)**](motion.html) 40 | 41 | 学习如何对一个OpenGL图形对象添加基本的运动效果。 42 | 43 | 44 | * [**响应触摸事件(Responding to Touch Events)**](touch.html) 45 | 46 | 学习如何与OpenGL图形进行基本的交互。 47 | -------------------------------------------------------------------------------- /content-sharing/secure-file-sharing/index.md: -------------------------------------------------------------------------------- 1 | # 分享文件 2 | 3 | > 编写:[jdneo](https://github.com/jdneo) - 原文: 4 | 5 | 一个程序经常需要向其他程序提供一个甚至多个文件。例如,当我们用图片编辑器编辑图片时,被编辑的图片往往由图库应用程序所提供;再比如,文件管理器会允许用户在外部存储的不同区域之间复制粘贴文件。这里,我们提出一种让应用程序可以分享文件的方法:即令发送文件的应用程序对索取文件的应用程序所发出的文件请求进行响应。 6 | 7 | 在任何情况下,将文件从我们的应用程序发送至其它应用程序的唯一的安全方法是向接收文件的应用程序发送这个文件的content URI,并对该URI授予临时访问权限。具有URI临时访问权限的content URI是安全的,因为他们仅应用于接收这个URI的应用程序,并且会自动过期。Android的[FileProvider](http://developer.android.com/reference/android/support/v4/content/FileProvider.html)组件提供了getUriForFile()方法创建一个文件的content URI。 8 | 9 | 如果希望在应用之间共享少量的文本或者数字等类型的数据,应使用包含该数据的Intent。要学习如何通过Intent发送简单数据,可以阅读:[Sharing Simple Data](../sharing/index.html)。 10 | 11 | 本课主要介绍了如何使用Android的[FileProvider](http://developer.android.com/reference/android/support/v4/content/FileProvider.html)组件所创建的content URI在应用之间安全的共享文件。当然,要做到这一点,还需要给接收文件的应用程序访问的这些content URI授予临时访问权限。 12 | 13 | ## Lessons 14 | 15 | * [**建立文件分享**](setup-sharing.html) 16 | 17 | 学习如何配置应用程序使得它们可以分享文件。 18 | 19 | 20 | * [**分享文件**](sharing-file.html) 21 | 22 | 学习分享文件的三个步骤: 23 | - 生成文件的content URI; 24 | - 授予URI的临时访问权限; 25 | - 将URI发送给接收文件的应用程序。 26 | 27 | 28 | * [**请求分享一个文件**](request-file.html) 29 | 30 | 学习如何向其他应用程序请求文件,如何接收该文件的content URI,以及如何使用content URI打开该文件。 31 | 32 | 33 | * [**获取文件信息**](retrieve-info.html) 34 | 35 | 学习应用程序如何通过FileProvider提供的content URI获取文件的信息:例如MIME类型,文件大小等。 36 | -------------------------------------------------------------------------------- /ui/system-ui/dim.md: -------------------------------------------------------------------------------- 1 | # 淡化系统Bar 2 | 3 | > 编写:[K0ST](https://github.com/K0ST) - 原文: 4 | 5 | 本课程将向你讲解如何在Android 4.0(*API level 14*)与更高的的系统版本上淡化系统栏(System bar,状态栏与导航栏)。早期版本的Android没有提供一个自带的方法来淡化系统栏。 6 | 7 | 当你使用这个方法的时候,内容区域并不会发生大小的变化,只是系统栏的图标会收起来。一旦用户触摸状态栏或者是导航栏的时候,这两个系统栏就又都会完全显示(无透明度)。这种方法的优势是系统栏仍然可见,但是它们的细节被隐藏掉了,因此可以在不牺牲快捷访问系统栏的情况下创建一个沉浸式的体验。 8 | 9 | **这节课将教您** 10 | 11 | 1. 淡化状态栏和导航栏 12 | 2. 显示状态栏和导航栏 13 | 14 | **同时您应该阅读** 15 | 16 | * [Action Bar API 指南](http://developer.android.com/guide/topics/ui/actionbar.html) 17 | * [Android Design Guide](http://developer.android.com/design/index.html) 18 | 19 | ## 淡化状态栏和系统栏 20 | 21 | 如果要淡化状态和通知栏,在版本为4.0以上的Android系统上,你可以像如下使用`SYSTEM_UI_FLAG_LOW_PROFILE`这个标签。 22 | 23 | ```java 24 | // This example uses decor view, but you can use any visible view. 25 | View decorView = getActivity().getWindow().getDecorView(); 26 | int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE; 27 | decorView.setSystemUiVisibility(uiOptions); 28 | ``` 29 | 30 | 一旦用户触摸到了状态栏或者是系统栏,这个标签就会被清除,使系统栏重新显现(无透明度)。在标签被清除的情况下,如果你想重新淡化系统栏就必须重新设定这个标签。 31 | 32 | 图1展示了一个图库中的图片,界面的系统栏都已被淡化(需要注意的是图库应用完全隐藏状态栏,而不是淡化它);注意导航栏(图片的右侧)上变暗的白色的小点,他们代表了被隐藏的导航操作。 33 | 34 | ![low_profile_hide2x](low_profile_hide2x.png) 35 | 36 | **图1.**淡化的系统栏 37 | 38 | 图2展示的是同一张图片,系统栏处于显示的状态。 39 | 40 | ![low_profile_show2x](low_profile_show2x.png) 41 | 42 | **图2.**显示的系统栏 43 | 44 | ## 显示状态栏与导航栏 45 | 46 | 如果你想动态的清除显示标签,你可以使用`setSystemUiVisibility()`方法: 47 | 48 | ```java 49 | View decorView = getActivity().getWindow().getDecorView(); 50 | // Calling setSystemUiVisibility() with a value of 0 clears 51 | // all flags. 52 | decorView.setSystemUiVisibility(0); 53 | ``` 54 | -------------------------------------------------------------------------------- /wearables/ui/index.md: -------------------------------------------------------------------------------- 1 | # 为可穿戴设备创建自定义UI 2 | 3 | > 编写: [roya](https://github.com/RoyaAoki) 原文: 4 | 5 | 可穿戴apps的用户界面明显的不同于手持设备。可穿戴设备应用应该参考Android Wear[设计规范](https://developer.android.com/design/wear/index.html)和实现推荐的[UI模式](https://developer.android.com/design/wear/patterns.html), 6 | 这些保证在为可穿戴设备优化过的应用中保持统一的用户体验。 7 | 8 | 这个课程将教我们如何为[可穿戴应用](http://hukai.me/android-training-course-in-chinese/wearables/apps/creating.html)创建在所有Android可穿戴设备上看上去都不错的自定义UI和[自定义的notifications](http://hukai.me/android-training-course-in-chinese/wearables/apps/layouts.html#CustomNotifications)。为了达到上述目的,需要实现这些UI模式: 9 | 10 | * Card 11 | * 倒计时和确认 12 | * 长按退出 13 | * 2D Picker 14 | * 多选List 15 | 16 | 可穿戴UI库是Android SDK的Google Repository中的一部分,其中提供的类可以帮助我们实现这些模式和创建工作在圆形和方形Android可穿戴设备的layout。 17 | 18 | >**Note:** 我们推荐使用Android Studio做Android Wear开发,它提供工程初始配置,库包含和方便的打包,这些在ADT中是没有的。这系列教程假定你正在使用Android Studio。 19 | 20 | ## Lessons 21 | 22 | [定义Layouts](https://developer.android.com/training/wearables/ui/layouts.html) 23 | 24 | 学习如何创建在圆形和方形Android Wear设备上看起来不错的layout。 25 | 26 | [创建Card](https://developer.android.com/training/wearables/ui/cards.html) 27 | 28 | 学习如何创建自定义layout的Card 29 | 30 | [创建List](https://developer.android.com/training/wearables/ui/lists.html) 31 | 32 | 学习如何创建为可穿戴设备优化的List 33 | 34 | [创建2D Picker](https://developer.android.com/training/wearables/ui/2d-picker.html) 35 | 36 | 学习如何实现2D Picker UI模式以导航各页数据 37 | 38 | [显示确认界面](https://developer.android.com/training/wearables/ui/confirm.html) 39 | 40 | 学习如何在用户完成操作时显示确认动画 41 | 42 | [退出全屏的Activity](https://developer.android.com/training/wearables/ui/exit.html) 43 | 44 | 学习如何实现长按退出UI模式以退出全屏activities -------------------------------------------------------------------------------- /ux/design-nav/screen-planning.md: -------------------------------------------------------------------------------- 1 | # 规划界面和他们之间的关系 2 | 3 | > 编写:[XizhiXu](https://github.com/XizhiXu) - 原文: 4 | 5 | 多数 App 都有一种内在的信息模型,它能被表示成一个用对象类型构成的树或图。更浅显的说,你可以画一个有不同类型信息的图,这些信息代表用户在你 App 里用户与之互动的各种东西。软件工程师和数据架构师经常使用实例-关系图(Entity-Relationship Diagram,ERD)描述一个应用的信息模型。 6 | 7 | 让我们考虑一个让用户浏览一群已分类好的新闻事件和图片的应用例子。这种 App 一个可能的模型如下 ERD 图。 8 | 9 | ![app-navigation-screen-planning-erd](app-navigation-screen-planning-erd.png) 10 | 11 | **Figure 1.** 新闻应用例子的实例关系图 12 | 13 | ## 创建一个界面列表 14 | 15 | 一旦你定义了信息模型,你就可以开始定义那些能使用户在你的 App 中有效地发掘,查看和操作数据的上下文环境了。实际上,其中一种方法就是确定供用户导航和交互数据所需的 *界面完备集*(归纳了所有界面的集合)。但我们实际发现的界面集合应该根据目标设备变化。在设计过程中早点考虑到这点很重要,这样可以保证程序可以适应运行环境。 16 | 17 | 在我们的例子中,我们想让用户**查看**,**保存**和**分享**分类好了的**新闻**和**图片**。下面是涵盖了这些用例的界面完备列表。 18 | 19 | * 用来访问新闻和图片的 Home 或者 "Launchpad" 画面 20 | * 类别列表 21 | * 某个分类下的新闻列表 22 | * 新闻详情 View (在这里我们可以保存和分享) 23 | * 图片列表,不分类 24 | * 图片详情 View (在这里我们可以保存和分享) 25 | * 所有保存项列表 26 | * 图片保存列表 27 | * 新闻保存列表 28 | 29 | ## 图示界面关系 30 | 31 | 现在我们可以定义界面间的有向关系了。一个从界面 *A* 指向另一个界面 *B* 的箭头表示通过用户在画面 *A* 的某个交互动作可直达画面 *B* 。一旦我们定义了界面集和他们之间的关系,我们可以将他们一起全部表示在一张界面图中了: 32 | 33 | ![app-navigation-screen-planning-exhaustive-map](app-navigation-screen-planning-exhaustive-map.png) 34 | 35 | **Figure 2.** 新闻应用例子的界面完备Map 36 | 37 | 如果之后我们想允许用户提交新闻事件或者上传图片,我们可以在图中加额外的界面。 38 | 39 | ## 脱离简陋设计 40 | 41 | 这时,我们可以据这张完备的界面图设计一个功能完备应用了。可以由列表和导向子界面的按钮构成一个简单的UI: 42 | 43 | * 导向不同页面的按钮(例如,新闻,图片,保存的项目) 44 | * 纵向列表表示集合(例如,新闻列表,图片列表,等等) 45 | * 详细信息(例如,新闻 View ,图片 View ,等等) 46 | 47 | 但是,你可以利用屏幕组合技术和更高深导航元素以一种更直观,设备更理解的方式呈现内容。下节课,我们探索屏幕组合技术,比如为平板而生的多视窗(Multi-pane)布局。之后,我将深入讲解更多不同的 Android 常见导航模式。 48 | 49 | [下节课:规划多种触屏大小](multi-sizes.html) 50 | -------------------------------------------------------------------------------- /enterprise/index.md: -------------------------------------------------------------------------------- 1 | # 创建企业级应用 2 | 3 | > 编写:[craftsmanBai](https://github.com/craftsmanBai) - - 原文: 4 | 5 | ![](work-launcher.png) 6 | 7 | Android框架提供安全支持、数据分离、企业环境管理的功能。作为应用开发者,通过适当地处理企业安全和功能限制,你可以让你的应用程序吸引更多的企业客户。也可以修改你的应用使技术管理员可远程配置使用企业资源。 8 | 9 | 为了帮助企业将安卓设备和应用程序进入工作场所,Google通过Android for Work为设备的分配和管理提供了一套API和服务。通过这项计划,企业可以连接到企业移动性管理(EMM)供应商,将Android整合到工作中。 10 | 11 | 通过下面的链接获取,可以了解更多关于如何更新您的Android应用程序来支持企业环境或建立企业解决方案的信息。 12 | 13 | 14 | ## 企业级应用开发 15 | 16 | 了解在企业环境中如何使您的应用程序运行顺畅,限制设备的功能和数据访问。通过加入限制进一步支持企业使用你的app,让管理员可以远程配置使用你的应用程序: 17 | 18 | 确保与管理兼容: 19 | 20 | [http://developer.android.com/training/enterprise/app-compatibility.html](http://developer.android.com/training/enterprise/app-compatibility.html 21 | ) 22 | 23 | 加入应用限制: 24 | 25 | [http://developer.android.com/training/enterprise/app-restrictions.html](http://developer.android.com/training/enterprise/app-restrictions.html) 26 | 27 | 应用限制计划: 28 | 29 | [http://developer.android.com/samples/AppRestrictionSchema/index.html](http://developer.android.com/samples/AppRestrictionSchema/index.html) 30 | 31 | 32 | 应用限制执行者: 33 | 34 | 35 | [http://developer.android.com/samples/AppRestrictionEnforcer/index.html](http://developer.android.com/samples/AppRestrictionEnforcer/index.html) 36 | 37 | ## 设备与应用管理 38 | 39 | 学习如何为应用程序建立策略控制器,使企业的技术管理人员来管理设备,管理企业应用程序,并提供访问公司资源的权限: 40 | 41 | 建立工作策略控制: 42 | 43 | [http://developer.android.com/training/enterprise/work-policy-ctrl.html](http://developer.android.com/training/enterprise/work-policy-ctrl.html) 44 | 45 | 基本管理模型: 46 | 47 | [http://developer.android.com/samples/BasicManagedProfile/index.html](http://developer.android.com/samples/BasicManagedProfile/index.html) 48 | -------------------------------------------------------------------------------- /testing/activity-testing/prepare-activity-testing.md: -------------------------------------------------------------------------------- 1 | # 建立测试环境 2 | 3 | > 编写:[huanglizhuo](https://github.com/huanglizhuo) - 原文: 4 | 5 | 在开始编写并运行我们的测试之前,我们应该建立测试开发环境。本小节将会讲解如何建立Eclipse IDE来构建和运行我们的测试,以及怎样用Gradle构建工具在命令行下构建和运行我们的测试。 6 | 7 | > 注意: 本小节基于的是Eclipse及ADT插件。然而,你在自己测试开发时可以自由选用IDE或命令行。 8 | 9 | ## 用Eclipse建立测试 10 | 11 | 安装了Android Developer Tools (ADT) 插件的Eclipse将为我们创建,构建,以及运行Android程序提供一个基于图形界面的集成开发环境。Eclipse可以自动为我们的Android应用项目创建一个对应的测试项目。 12 | 13 | 开始在Eclipse中创建测试环境: 14 | 15 | 1. 如果还没安装Eclipse [ADT](http://developer.android.com/sdk/installing/bundle.html)插件,请先下载安装。 16 | 2. 导入或创建我们想要测试的Android应用项目。 17 | 3. 生成一个对应于应用程序项目测试的测试项目。为导入项目生成一个测试项目: 18 | a.在项目浏览器里,右击我们的应用项目,然后选择**Android Tools > New Test Project** 19 | b.在新建Android测试项目面板,为我们的测试项目设置合适的参数,然后点击**Finish** 20 | 21 | 现在应该可以在Eclipse环境中创建,构建和运行测试项目了。想要继续学习如何在Eclipse中进行这些任务,可以阅读[创建与执行测试用例](activity-basic-testing.html) 22 | 23 | ## 用命令行建立测试 24 | 25 | 如果正在使用Gradle version 1.6或者更高的版本作为构建工具,可以用Gradle Wrapper创建。构建和运行Android应用测试。确保在`gradle.build`文件中,`defaultConfig`部分中的[minSdkVersion](http://developer.android.com/guide/topics/manifest/uses-sdk-element.html)属性是8或更高。可以参考包含在下载包中的示例文件gradle.build 26 | 27 | ## 用Gradle Wrapper运行测试: 28 | 29 | 1. 连接Android真机或开启Android模拟器。 30 | 2. 在项目目录运行如下命令: 31 | 32 | >./gradlew build connectedCheck 33 | 34 | 进一步学习Gradle关于Android测试的内容,参看[Gradle Plugin User Guide](http://www.gradle.org/docs/current/userguide/userguide_single.html)。 35 | 36 | 进一步学习使用Gradle及其它命令行工具,参看[Testing from Other IDEs.](http://developer.android.com/tools/testing/testing_otheride.html)。 37 | 38 | 本节示例代码[AndroidTestingFun.zip](http://developer.android.com/shareables/training/AndroidTestingFun.zip) 39 | -------------------------------------------------------------------------------- /animations/layout.md: -------------------------------------------------------------------------------- 1 | # 布局变更动画 2 | 3 | > 编写:[XizhiXu](https://github.com/XizhiXu) - 原文: 4 | 5 | 布局动画是一种预加载动画,系统在每次改变布局配置时运行它。我们需要做的仅是在布局文件里设置属性告诉Android系统为这些布局的变更应用动画,然后系统的默认动画便会执行。 6 | 7 | > **小贴士:** 如果你想补充自定义布局动画,创建 [`LayoutTransition`](http://developer.android.com/reference/android/animation/LayoutTransition.html) 对象,然后用 `setLayoutTransition()` 方法把它加到布局中。 8 | 9 | 下面的例子在一个list中添加一项的默认布局动画: 10 | 11 |
14 | 15 | 20 | 21 |
22 | 23 | 如果你想直接查看整个例子,[下载](http://developer.android.com/shareables/training/Animations.zip) App 样例并运行然后选择布局渐变的例子。查看下列文件中的代码实现: 24 | 25 | * `src/LayoutChangesActivity.java` 26 | * `layout/activity_layout_changes.xml` 27 | * `menu/activity_layout_changes.xml` 28 | 29 | ## 创建布局 30 | 31 | 在Activity的XML布局文件中,为想开启动画的布局设置`android:animateLayoutChanges`属性为`true`。例如: 32 | 33 | ```xml 34 | 38 | ``` 39 | 40 | ## 从布局中添加,更新或删除项目 41 | 42 | 现在,我们需要做的就是添加,删除或更新布局里的项目,然后这些项目就会自动显示动画: 43 | 44 | ```java 45 | private ViewGroup mContainerView; 46 | ... 47 | private void addItem() { 48 | View newView; 49 | ... 50 | mContainerView.addView(newView, 0); 51 | } 52 | ``` 53 | -------------------------------------------------------------------------------- /ui/multiscreen/screen-desities.md: -------------------------------------------------------------------------------- 1 | # 兼容不同的屏幕密度 2 | 3 | > 编写:[riverfeng](https://github.com/riverfeng) - 原文: 4 | 5 | 这节课将教你如何通过提供不同的资源和使用独立分辨率(dp)来支持不同的屏幕密度。 6 | 7 | ## 使用密度独立像素(dp) 8 | 9 | 设计布局时,要避免使用绝对像素(absolutepixels)定义距离和尺寸。使用像素单位来定义布局大小是有问题的。因为,不同的屏幕有不同的像素密度,所以,同样单位的像素在不同的设备上会有不同的物理尺寸。因此,在指定单位的时候,通常使用dp或者sp。一个dp代表一个密度独立像素,也就相当于在160 dpi的一个像素的物理尺寸,sp也是一个基本的单位,不过它主要是用在文本尺寸上(它也是一种尺寸规格独立的像素),所以,你在定义文本尺寸的时候应该使用这种规格单位(不要使用在布尺寸上)。 10 | 11 | 例如,当你是定义两个view之间的空间时,应该使用dp而不是px: 12 | ```xml 13 |