├── DOCS └── B_Guides │ ├── 2_Devices │ └── 2_4_Android_for_Cars │ │ ├── 2_4_1_Overview.md │ │ ├── 2_4_2_Google_Play_services_for_cars.md │ │ ├── 2_4_7_Test_Android_apps_for_cars.md │ │ ├── 2_4_3_Get_started_with_Android_for_Cars.md │ │ ├── 2_4_4_Build_Android_media_apps_for_cars.md │ │ ├── 2_4_5_Build_messaging_apps_for_Android_Auto.md │ │ └── 2_4_6_Add_Android_Automotive_OS_support_to_your_Android_Auto_project.md │ ├── 1_App_Basics │ └── 1_6_App_Permissions │ │ ├── 1_6_1_Overview.md │ │ ├── 1_6_4_Define_custom_permissions.md │ │ ├── 1_6_2_Request_app_permissions.md │ │ └── 1_6_3_App_permissions_best_practices.md │ └── 3_Core_topics │ ├── 3_7_Images_&_graphics │ ├── 3_7_1_Overview.md │ ├── 3_7_8_OpenGL_ES.md │ ├── 3_7_2_Drawables_overview.md │ ├── 3_7_4_Handling_bitmaps.md │ ├── 3_7_7_Hardware_acceleration.md │ ├── 3_7_10_Rendering │ │ ├── 3_7_10_1_Overview.md │ │ ├── 3_7_10_2_Reducing_overdraw.md │ │ ├── 3_7_10_3_Performance_and_view_hierarchies.md │ │ └── 3_7_10_4_Analyze_with_profile_GPU_rendering.md │ ├── 3_7_3_Vector_drawables_overview.md │ ├── 3_7_6_Reducing_image_download_sizes.md │ ├── 3_7_5_Selecting_colors_with_the_palette_API.md │ ├── 3_7_11_Enhance_graphics_with_wide color_content.md │ └── 3_7_9_Displaying_graphics_with_OpenGL_ES │ │ ├── 3_7_9_1_Overview.md │ │ ├── 3_7_9_4_Draw_shapes.md │ │ ├── 3_7_9_3_Define_shapes.md │ │ ├── 3_7_9_6_Adding_motion.md │ │ ├── 3_7_9_7_Responding_to_touch_events.md │ │ ├── 3_7_9_2_Build_an_OpenGL_ES_environment.md │ │ └── 3_7_9_5_Apply_projection_and_camera_views.md │ ├── 3_6_Animations_&_transitions │ ├── 3_6_1_Overview.md │ ├── 3_6_2_Animations_overview.md │ ├── 3_6_3_Property_animation_overview.md │ ├── 3_6_4_Animate_drawable_graphics.md │ ├── 3_6_6_Move_a_view_with_animation.md │ ├── 3_6_10_Auto_animate_layout_updates.md │ ├── 3_6_12_Create_a_custom_transition_animation.md │ ├── 3_6_13_Start_an_activity_using_an_animation.md │ ├── 3_6_5_Reveal_or_hide_a_view_using_animation.md │ ├── 3_6_7_Move_views_using_a_fling_animation.md │ ├── 3_6_8_Enlarge_a_view_using_a_zoom_animation.md │ ├── 3_6_9_Animate_movement_using_spring_physics.md │ └── 3_6_11_Animate_layout_changes_using_a_transition.md │ ├── 3_8_Audio_&_Video │ └── 3_8_6_MediaPlayer_Overview.md │ ├── 3_5_User_interface │ ├── 3_5_2_Layouts │ │ ├── 3_5_2_8_Grid_View.md │ │ ├── 3_5_2_4_Create_a_card_based_layout.md │ │ ├── 3_5_2_3_Create_a_list_with_RecyclerView.md │ │ ├── 3_5_2_9_Custom_view_components │ │ │ ├── 3_5_2_9_1_Overview.md │ │ │ ├── 3_5_2_9_2_Creating_a_view_class.md │ │ │ ├── 3_5_2_9_4_Making_view_interactive.md │ │ │ ├── 3_5_2_9_5_Optimizing_the_view.md │ │ │ └── 3_5_2_9_3_Implementing_custom_drawing.md │ │ ├── 3_5_2_2_Build_a_responsive_UI_with_ConstraintLayout.md │ │ ├── 3_5_2_6_Improving_layout_performance │ │ │ ├── 3_5_2_6_1_Overview.md │ │ │ ├── 3_5_2_6_4_Delayed_loading_of_Views.md │ │ │ ├── 3_5_2_6_2_Optimizing_layout_hierarchies.md │ │ │ ├── 3_5_2_6_3_Re-using_layouts_with_.md │ │ │ └── 3_5_2_6_5_Making_ListView_scrolling_smooth.md │ │ ├── 3_5_2_1_Overview.md │ │ ├── 3_5_2_7_Linear_Layout.md │ │ └── 3_5_2_5_Implementing_adpative_UI_flows.md │ └── 3_5_3_Look_and_feel │ │ └── 3_5_3_6_Text │ │ └── 3_5_3_6_4_Emoji_compatibility.md │ ├── 3_1_Activities │ └── 3_1_7_Fragments │ │ ├── 3_1_7_2_Creating_a_fragment.md │ │ ├── 3_1_7_3_Test_your_app's_fragments.md │ │ ├── 3_1_7_5_Communicating_with_other_fragments.md │ │ ├── 3_1_7_1_Overview.md │ │ └── 3_1_7_4_Building_a_flexible_UI.md │ ├── 3_10_App_data_&_files │ ├── 3_10_6_Sharing_simple_data │ │ ├── 3_8_6_1_Overview.md │ │ ├── 3_8_6_4_Adding_an_easy_share_action.md │ │ ├── 3_8_6_2_Sending_simple_data_to_other_apps.md │ │ └── 3_8_6_3_Receiving_simple_data_from_other_apps.md │ └── 3_10_5_Save_data_in_a_local_database │ │ ├── 3_8_5_1_Overview.md │ │ ├── 3_8_5_2_Storage_overview.md │ │ ├── 3_8_5_4_Save_key-value_data.md │ │ ├── 3_8_5_3_Save_files_on_device_storage.md │ │ └── 3_8_5_5_Save_data_in_a_local_database │ │ ├── 3_8_5_5_1_Overview.md │ │ ├── 3_8_5_5_3_Accessing_data_using_DAOs.md │ │ ├── 3_8_5_5_4_Migrating_room_databases.md │ │ ├── 3_8_5_5_5_Testing_room_databases.md │ │ ├── 3_8_5_5_6_Referencing_complex_data.md │ │ └── 3_8_5_5_2_Defining_data_using_entities.md │ ├── 3_3_Navigation │ ├── 3_3_7_Implement_conditional_navigation.md │ ├── 3_3_10_Migrate_to_the_Navigation_Architecture_Component.md │ ├── 3_3_9_Global_actions.md │ ├── 3_3_1_Overview.md │ ├── 3_3_6_Add_support_for_new_destination.md │ ├── 3_3_8_Create_a_deep_link_for_a_destination.md │ ├── 3_3_4_Nested_graphs.md │ └── 3_3_5_Pass_data_between_destinations.md │ ├── 3_23_Slices │ ├── 3_23_1_Overview.md │ └── 3_23_2_Getting_started.md │ └── 3_2_Architecture_Components │ ├── 3_2_2_Adding_Components_to_your_Project.md │ ├── 3_2_9_WorkManager │ ├── 3_2_9_1_Overview.md │ ├── 3_2_9_3_Advanced.md │ ├── 3_2_9_2_Basics.md │ └── 3_2_9_4_Migrating_from_Firebase_JobDispatcher.md │ ├── 3_2_7_Room_Persistence_Library.md │ ├── 3_2_1_Overview.md │ ├── 3_2_3_Data_Binding_Library │ ├── 3_2_3_2_Get_Started.md │ ├── 3_2_3_1_Overview.md │ ├── 3_2_3_8_Two-way_data_binding.md │ ├── 3_2_3_7_Bind_layout_views_to_Architecture_Components.md │ ├── 3_2_3_4_Work_with_observable_data_objects.md │ ├── 3_2_3_5_Generated_binding_classes.md │ └── 3_2_3_6_Binding_adapters.md │ ├── 3_2_6_Paging_library │ ├── 3_2_6_2_UI_Components_and_Considerations.md │ └── 3_2_6_3_Data_Components_and_Considerations.md │ ├── 3_2_10_Saving_States.md │ └── 3_2_8_ViewModel.md ├── PLATFORM ├── E_Kotlin │ ├── 5_Resources_to_Learn_Kotlin.md │ ├── 1_Kotlin_and_Android.md │ ├── 2_Get_Started_with_Kotlin.md │ ├── 3_Kotlin_on_Android_FAQ.md │ └── 4_Android_KTX.md └── D_Libraries │ ├── 4_Setup.md │ ├── 2_Features.md │ └── 1_Support_Library_Overview.md ├── IMGS_BACKUP └── paging-library-data-flow.png ├── .gitignore └── ANDROID_JETPACK ├── C_AndroidX ├── 1_AndroidX_Overview.md └── 4_Jetpack_Compose.md ├── A_Overview.md └── B_Get_started └── 1_Build_your_first_Android_Jetpack_app.md /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/1_App_Basics/1_6_App_Permissions/1_6_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_8_OpenGL_ES.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_2_Drawables_overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_4_Handling_bitmaps.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_8_Audio_&_Video/3_8_6_MediaPlayer_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/1_App_Basics/1_6_App_Permissions/1_6_4_Define_custom_permissions.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_2_Google_Play_services_for_cars.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_7_Test_Android_apps_for_cars.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_8_Grid_View.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_7_Hardware_acceleration.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_3_Get_started_with_Android_for_Cars.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_4_Build_Android_media_apps_for_cars.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_2_Animations_overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_10_Rendering/3_7_10_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_3_Vector_drawables_overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_6_Reducing_image_download_sizes.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_5_Build_messaging_apps_for_Android_Auto.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_1_Activities/3_1_7_Fragments/3_1_7_2_Creating_a_fragment.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_3_Property_animation_overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_4_Animate_drawable_graphics.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_6_Move_a_view_with_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_6_Sharing_simple_data/3_8_6_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_1_Activities/3_1_7_Fragments/3_1_7_3_Test_your_app's_fragments.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_4_Create_a_card_based_layout.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_10_Auto_animate_layout_updates.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_10_Rendering/3_7_10_2_Reducing_overdraw.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_5_Selecting_colors_with_the_palette_API.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_3_Create_a_list_with_RecyclerView.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_12_Create_a_custom_transition_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_13_Start_an_activity_using_an_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_5_Reveal_or_hide_a_view_using_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_7_Move_views_using_a_fling_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_8_Enlarge_a_view_using_a_zoom_animation.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_9_Animate_movement_using_spring_physics.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_11_Enhance_graphics_with_wide color_content.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_1_Activities/3_1_7_Fragments/3_1_7_5_Communicating_with_other_fragments.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_6_Animations_&_transitions/3_6_11_Animate_layout_changes_using_a_transition.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_9_Custom_view_components/3_5_2_9_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_3_Look_and_feel/3_5_3_6_Text/3_5_3_6_4_Emoji_compatibility.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_10_Rendering/3_7_10_3_Performance_and_view_hierarchies.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_10_Rendering/3_7_10_4_Analyze_with_profile_GPU_rendering.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_4_Draw_shapes.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/2_Devices/2_4_Android_for_Cars/2_4_6_Add_Android_Automotive_OS_support_to_your_Android_Auto_project.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_2_Storage_overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_4_Save_key-value_data.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_6_Sharing_simple_data/3_8_6_4_Adding_an_easy_share_action.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_2_Build_a_responsive_UI_with_ConstraintLayout.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_3_Define_shapes.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_6_Adding_motion.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_6_Sharing_simple_data/3_8_6_2_Sending_simple_data_to_other_apps.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_3_Save_files_on_device_storage.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_6_Sharing_simple_data/3_8_6_3_Receiving_simple_data_from_other_apps.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_9_Custom_view_components/3_5_2_9_2_Creating_a_view_class.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_9_Custom_view_components/3_5_2_9_4_Making_view_interactive.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_9_Custom_view_components/3_5_2_9_5_Optimizing_the_view.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_7_Responding_to_touch_events.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /PLATFORM/E_Kotlin/5_Resources_to_Learn_Kotlin.md: -------------------------------------------------------------------------------- 1 | 请参阅: 2 | https://developer.android.google.cn/kotlin/resources 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_9_Custom_view_components/3_5_2_9_3_Implementing_custom_drawing.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_2_Build_an_OpenGL_ES_environment.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_7_Images_&_graphics/3_7_9_Displaying_graphics_with_OpenGL_ES/3_7_9_5_Apply_projection_and_camera_views.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_6_Improving_layout_performance/3_5_2_6_1_Overview.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_1_Overview.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_6_Improving_layout_performance/3_5_2_6_4_Delayed_loading_of_Views.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_3_Accessing_data_using_DAOs.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_4_Migrating_room_databases.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_5_Testing_room_databases.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_6_Referencing_complex_data.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_6_Improving_layout_performance/3_5_2_6_2_Optimizing_layout_hierarchies.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_6_Improving_layout_performance/3_5_2_6_3_Re-using_layouts_with_.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_6_Improving_layout_performance/3_5_2_6_5_Making_ListView_scrolling_smooth.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_10_App_data_&_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_2_Defining_data_using_entities.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /PLATFORM/D_Libraries/4_Setup.md: -------------------------------------------------------------------------------- 1 | # 支持库设置 2 | > 原文链接(官方翻译):[支持库设置 | Android Developers](https://developer.android.google.cn/topic/libraries/support-library/setup) 3 | -------------------------------------------------------------------------------- /PLATFORM/D_Libraries/2_Features.md: -------------------------------------------------------------------------------- 1 | # 支持库功能 2 | > 原文链接(官方翻译):[支持库功能 | Android Developers](https://developer.android.google.cn/topic/libraries/support-library/features) 3 | -------------------------------------------------------------------------------- /PLATFORM/D_Libraries/1_Support_Library_Overview.md: -------------------------------------------------------------------------------- 1 | # 支持库概览 2 | > 原文链接(官方翻译):[支持库 | Android Developers](https://developer.android.google.cn/topic/libraries/support-library) 3 | -------------------------------------------------------------------------------- /IMGS_BACKUP/paging-library-data-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/HEAD/IMGS_BACKUP/paging-library-data-flow.png -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_1_Overview.md: -------------------------------------------------------------------------------- 1 | # 布局 2 | > 原文链接(官方翻译):[布局 | Android Developers](https://developer.android.google.cn/guide/topics/ui/declaring-layout) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_1_Activities/3_1_7_Fragments/3_1_7_1_Overview.md: -------------------------------------------------------------------------------- 1 | # 片段(Fragment)概览 2 | > 原文链接(官方翻译):[片段 | Android Developers](https://developer.android.google.cn/guide/components/fragments) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_7_Linear_Layout.md: -------------------------------------------------------------------------------- 1 | # 线性布局 2 | > 原文链接(官方翻译):[线性布局 | Android Developers](https://developer.android.google.cn/guide/topics/ui/layout/linear) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/1_App_Basics/1_6_App_Permissions/1_6_2_Request_app_permissions.md: -------------------------------------------------------------------------------- 1 | # 在运行时请求权限 2 | > 原文链接(官方翻译):[在运行时请求权限 | Android Developers](https://developer.android.google.cn/training/permissions/requesting) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/1_App_Basics/1_6_App_Permissions/1_6_3_App_permissions_best_practices.md: -------------------------------------------------------------------------------- 1 | # 应用权限最佳做法 2 | > 原文链接(官方翻译):[应用权限最佳做法 | Android Developers](https://developer.android.google.cn/training/permissions/usage-notes) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_1_Activities/3_1_7_Fragments/3_1_7_4_Building_a_flexible_UI.md: -------------------------------------------------------------------------------- 1 | # 构建灵活的 UI 2 | > 原文链接(官方翻译):[构建灵活的 UI | Android Developers](https://developer.android.google.cn/training/basics/fragments/fragment-ui) 3 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_5_User_interface/3_5_2_Layouts/3_5_2_5_Implementing_adpative_UI_flows.md: -------------------------------------------------------------------------------- 1 | # 实现自适应 UI 流 2 | > 原文链接(官方翻译):[实现自适应 UI 流 | Android Developers](https://developer.android.google.cn/training/multiscreen/adaptui) 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # files for the dex VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # generated files 12 | bin/ 13 | gen/ 14 | 15 | # Local configuration file (sdk path, etc) 16 | local.properties 17 | gradle.properties 18 | 19 | 20 | # Eclipse project files 21 | .classpath 22 | .project 23 | 24 | # Proguard folder generated by Eclipse 25 | proguard/ 26 | 27 | # Intellij project files 28 | *.iml 29 | *.ipr 30 | *.iws 31 | .idea/ 32 | out/ 33 | build/ 34 | **/build/ 35 | 36 | .DS_Store 37 | .DS_Store? 38 | 39 | .gradle 40 | production/ 41 | 42 | signing.properties 43 | 44 | *~ 45 | #extras/external_tagsoup/ 46 | 47 | module/ 48 | captures/ 49 | 50 | *.pub 51 | 52 | freeline/ 53 | freeline.py 54 | freeline_project_description.json 55 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_7_Implement_conditional_navigation.md: -------------------------------------------------------------------------------- 1 | # 实现有条件的导航 2 | > 原文链接:[Implement conditional navigation | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/navigation/navigation-conditional) 3 | 4 | 您的应用可能有一系列的只能在特定条件下(例如,当用户需要登录时)使用的目的地,即:**有条件的目的地(conditional destination)**。这些目的地应当被创建为由其他目的地发起的独立目的地或嵌套导航图。 5 | 6 | 图一展示了这样的情形:某个用户导航到个人主页目的地,而后者判定用户并没有登录,因此要求用户导航到登录目的地;接着,等用户完成登陆后,该登录目的地再把用户带回个人主页的目的地。 7 | 8 | ![图一:有条件的导航](https://developer.android.google.cn/images/topic/libraries/architecture/navigation-conditional-graph.png?hl=zh-cn) 9 | **图一:**有条件的导航 10 | 11 | 该登录目的地应在用户回到个人主页目的地后,将自己从导航栈中出栈。请在导航回到原先的目的地时调用 [`popBackStack()`](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn#popBackStack()),那么原先的目的地就会被顶到栈顶,因而处于活跃状态。 12 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_10_Migrate_to_the_Navigation_Architecture_Component.md: -------------------------------------------------------------------------------- 1 | # 迁移到 Navigation 架构组件 2 | > 原文链接:[Migrate to the Navigation Architecture Component | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/navigation/navigation-migrate) 3 | 4 | [`NavController`](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 及其导航图是包含在单个 activity 中的。因此,当您把一个现有的项目迁移到 Navigation 架构组件上时,请每次只集中精力在迁移一个 activity 上,为每个 activity 中的目的地创建导航图。 5 | 6 | ![图一:Activity 及其各自的导航图](https://developer.android.google.cn/images/topic/libraries/architecture/navigation-migrate1.png?hl=zh-cn) 7 | **图一:** Activity 及其各自的导航图 8 | 9 | 各个 activity 可以通过向其导航图添加 activity 目的地的方式来连接其他的 activity,用于取代整个代码库中的 [`startActivity()`](https://developer.android.google.cn/reference/android/app/Activity?hl=zh-cn#startactivity) 调用。 10 | 11 | ![图二:Activity A 中的导航图指向 Activity B](https://developer.android.google.cn/images/topic/libraries/architecture/navigation-migrate2.png?hl=zh-cn) 12 | **图二:** Activity A 中的导航图指向 Activity B 13 | 14 | 在多个 activity 共用相同布局的情况下,导航图可以被合并,并将导航到 activity 目的地的 `navigate()` 调用替换成两个导航图之间的直接导航。 15 | 16 | ![图三:含有合并导航图的 activity](https://developer.android.google.cn/images/topic/libraries/architecture/navigation-migrate3.png?hl=zh-cn) 17 | **图三:** 含有合并导航图的 activity 18 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_23_Slices/3_23_1_Overview.md: -------------------------------------------------------------------------------- 1 | # 切片概览 2 | > 原文链接:[Slices | Android Developers](https://developer.android.google.cn/guide/slices) 3 | 4 | 切片(Slices)是能够在谷歌搜索应用及谷歌助手中展示来自您应用的丰富、动态且可交互内容的 UI 模板。用户利用切片可以在不进入全屏应用的情况下进行交互,因而能够更便捷地完成任务。您可以把切片构建成[应用动作(App Action))](https://developer.android.google.cn/guide/actions?hl=zh-cn)的增强版。 5 | 6 | [Android Jetpack](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/ANDROID_JETPACK/A_Overview.md) 已内建了对切片的支持,并且可以向后兼容到 Android 4.4,因而覆盖到大约 95% 的 Android 用户。 7 | 8 | 用户很快就能使用切片,但您现在就能[开始动手](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_23_Slices/3_23_2_Getting_started.md) 。 9 | 10 | ## 丰富而灵活的布局 11 | 12 | 使用[切片模板](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_23_Slices/3_23_3_Slice_templates.md),您可以定制切片的颜色、文本、图像、视频等等,来匹配您应用的设计。 13 | 14 | ![](https://developer.android.google.cn/guide/slices/images/slices-landing-example-1.png?hl=zh-cn) 15 | 16 | ## 动态的可交互内容 17 | 18 | 切片支持 LiveData、滚动内容、内联行为(inline action)和深层链接(deep-link),还包含了开关(toggle)和滑块(slider)等可交互的控件。 19 | 20 | ![](https://developer.android.google.cn/guide/slices/images/slices-landing-example-3.png?hl=zh-cn) 21 | 22 | -------------------------------------------------------------------------------- /ANDROID_JETPACK/C_AndroidX/1_AndroidX_Overview.md: -------------------------------------------------------------------------------- 1 | # AndroidX 概览 2 | 3 | > 原文链接:[AndroidX Overview | Android Developers](https://developer.android.google.cn/jetpack/androidx) 4 | 5 | AndroidX 是 Android 团队用于在 [Jetpack](https://developer.android.google.cn/jetpack) 中开发、测试、打包、发版和发布依赖库的开源项目。 6 | 7 | AndroidX 是对原有 Android [支持库](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/PLATFORM/D_Libraries/1_Support_Library_Overview.md) 的重大改进。与支持库一样,AndroidX 与 Android 操作系统分开提供,并提供跨 Android 版本的向后兼容性。 AndroidX 通过提供相同功能和新的依赖库完全取代了支持库。此外,AndroidX还包括以下功能: 8 | - AndroidX 中的所有软件包都以字符串 `androidx` 开头,位于一致的命名空间。支持库包已映射到相应的 `androidx*` 包中。有关所有旧类和构件到新版的完整映射,请参阅 [迁移到 AndroidX](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/ANDROID_JETPACK/C_AndroidX/2_Migrating_to_AndroidX.md) 页面。 9 | - 与支持库不同,AndroidX 软件包是单独维护和更新的。从版本 1.0.0 开始,`androidx` 软件包使用严格的 [语义版本控制](https://semver.org/)。您可以单独更新项目中的 AndroidX 库。 10 | - 所有新的支持库开发都将在 AndroidX 库中进行。这包括维护原有支持库和引入新的 Jetpack 组件。 11 | 12 | ## 使用 AndroidX 13 | 14 | 请参阅 [迁移到 AndroidX](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/ANDROID_JETPACK/C_AndroidX/2_Migrating_to_AndroidX.md) 以了解如何迁移现有项目。 15 | 16 | 如果要在新项目中使用 AndroidX,则需要将 compile SDK 设置为 Android 9.0(API级别28)或更高版本,并在 [gradle.properties文件](https://developer.android.google.cn/studio/build/#properties-files) 中将以下两个 Android Gradle 插件标志设置为 `true`。 17 | - `android.useAndroidX`:设置为 `true` 时,Android 插件使用相应的 AndroidX 库而不是支持库。如果未指定,则默认情况下该标志为 `false`。 18 | - `android.enableJetifier`:当设置为 `true` 时,Android 插件会自动迁移现有的第三方库,通过重写其二进制文件来使用 AndroidX。如果未指定,则默认情况下该标志为 `false`。 19 | 20 | ## AndroidX 参考文档 21 | 22 | AndroidX 中的所有包和类都可以在 [AndroidX 参考文档](https://developer.android.google.cn/reference/androidx/packages) 找到。 23 | 24 | ## 其他资源 25 | 26 | Jetpack 组件是 AndroidX 库的一部分。在 [Jetpack主页](https://developer.android.google.cn/jetpack) 上了解有关组件的更多信息。 27 | 28 | 有关从支持库到 AndroidX 的包重构的更多信息,请参阅 [博客文章](https://android-developers.googleblog.com/2018/05/hello-world-androidx.html)。 29 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_9_Global_actions.md: -------------------------------------------------------------------------------- 1 | # 全局动作 2 | > 原文链接:[Global actions | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/navigation/navigation-global-action) 3 | 4 | 您可以使用 **全局动作(global action)** 来创建一个供多个目的地共用的通用动作。例如,您可能想让不同目的地中的按钮都能导航到相同的主界面。 5 | 6 | 在导航编辑器中,全局动作是用一个指向该目的地的小箭头表示的,如图一所示: 7 | 8 | ![图一:指向某个嵌套导航图的全局动作](https://developer.android.google.cn/topic/libraries/architecture/images/navigation-global-action.png?hl=zh-cn) 9 | **图一:**指向某个嵌套导航图的全局动作 10 | 11 | ## 创建全局动作 12 | 13 | 欲创建一个全局动作,请按以下步骤操作: 14 | 15 | 1. 在 **Graph Editor** 中,单击一个目的地以使其高亮。 16 | 2. 右键单击该目的地来打开 context 菜单。 17 | 3. 选择 **Add Action > Global**,一个箭头![](https://developer.android.google.cn/studio/images/buttons/navigation-globalaction.png?hl=zh-cn)就会在该目的地的左边出现。 18 | 4. 单击 **Text** 标签页来切换到 XML 文本视图。该全局动作的 XML 代码如下所示: 19 | 20 | ```xml 21 | 22 | 27 | 28 | ... 29 | 30 | 32 | 33 | 34 | ``` 35 | 36 | ## 使用全局动作 37 | 38 | 欲在您的代码中使用全局动作,请将该全局动作的资源 ID 传入每个 UI 元素的 [`navigate()`](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn#navigate(int)) 方法,如下所示: 39 | 40 | ```java 41 | viewTransactionsButton.setOnClickListener(new View.OnClickListener() { 42 | @Override 43 | public void onClick(View view) { 44 | Navigation.findNavController(view).navigate(R.id.action_global_mainFragment); 45 | } 46 | }); 47 | ``` 48 | 49 | ## 和 Safe Args 一起使用全局动作 50 | 51 | 欲了解更多和 Safe Args 一起使用全局动作的信息,请参阅[在目的地之间传递数据](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_5_Pass_data_between_destinations.md)。 52 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_2_Adding_Components_to_your_Project.md: -------------------------------------------------------------------------------- 1 | # 为您的项目添加 Android 架构组件 2 | > 原文链接:[Adding Components to your Project | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/adding-components) 3 | 4 | 在开始之前,我们建议您先阅读这篇[应用架构指南](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/ANDROID_JETPACK/B_Get_started/2_Guide_to_app_architecture.md)。该指南提及了一些对任何应用都有意义的原则,并且展示了应该如何把架构组件整合起来。 5 | 6 | Android 架构组件可以从 Google 的 Maven 仓库中获取,要使用组件,您必须将仓库添加到项目中。 7 | 8 | 打开**您的项目**(而非您的应用或模块)的 `build.gradle` 文件,然后添加 `google()` 仓库,如下所示: 9 | 10 | ```groovy 11 | allprojects { 12 | repositories { 13 | google() 14 | jcenter() 15 | } 16 | } 17 | ``` 18 | 19 | ## 声明依赖关系 20 | 21 | 打开**您的应用或模块**的 `build.gradle` 文件,然后添加您需要依赖的 artifact。您可以添加所有架构组件的全部依赖,或者只添加其中的一部分。 22 | 23 | 请参阅发行日志中有关为每个组件声明依赖关系的说明: 24 | - [WorkManager](https://developer.android.google.cn/jetpack/androidx/releases/work):后台任务管理 25 | - [Navigation](https://developer.android.google.cn/jetpack/androidx/releases/navigation)(包含 SafeArgs):导航 26 | - [Paging](https://developer.android.google.cn/jetpack/androidx/releases/paging):分页 27 | - [Lifecycle components](https://developer.android.google.cn/jetpack/androidx/releases/lifecycle)(包含 ViewModel):生命周期组件 28 | - [Futures](https://developer.android.google.cn/jetpack/androidx/releases/concurrent) (在 androidx.concurrent 包中):并发 29 | - [Room](https://developer.android.google.cn/jetpack/androidx/releases/room)(此项为译者补充):数据持久化 30 | 31 | 欲了解有关 AndroidX 重构的更多细节、以及它会如何影响包和模块的 ID,请参阅 [AndroidX 重构](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/PLATFORM/D_Libraries/6_AndroidX/6_2_Refactoring.md)。 32 | 33 | ## Kotlin 34 | 35 | 几个 AndroidX 依赖项已支持 Kotlin 扩展模块。 这些模块的名称后面附加了后缀 “-ktx”。 例如: 36 | 37 | ```groovy 38 | implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" 39 | ``` 40 | 41 | 变成 42 | 43 | ```groovy 44 | implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" 45 | ``` 46 | 47 | 欲了解包括 Kotlin 扩展的更多信息,请参阅 [Android KTX](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/PLATFORM/E_Kotlin/4_Android_KTX.md)。 48 | 49 | > **注意**:请务必在基于 Kotlin 的应用中使用 **kapt** 而非 **annotationProcessor**。此外,您还应该添加 **kotlin-kapt** 插件。 50 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_9_WorkManager/3_2_9_1_Overview.md: -------------------------------------------------------------------------------- 1 | # 使用 WorkManager 来调度任务 2 | > 原文链接:[Schedule tasks with WorkManager | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/workmanager/) 3 | 4 | WorkManager 的 API 让您能轻松地指定可推迟的异步任务并安排其执行的时间,即使应用已经退出或者设备重启。 5 | 6 | **主要特点:** 7 | - 向后兼容至 API 14 8 | - 在 API 23+ 的设备上使用 JobScheduler 9 | - 在 API 14-22 的设备上组合使用 BroadcastReceiver + AlarmManager 10 | - 添加网络可用性或电量等工作限制 11 | - 调度一次性或周期性的异步任务 12 | - 监测和管理已调度的任务 13 | - 任务可连锁在一起 14 | - 即使应用程序或设备重新启动,也可保证任务执行 15 | 16 | WorkManager 适用于可推迟的、无需立即执行的任务,即使应用程序退出或设备重启也要保证可靠运行。例如: 17 | - 发送日志或分析数据给服务端 18 | - 定期与服务器同步应用程序数据 19 | 20 | WorkManager 不适用于在应用进程消失时可以安全终止的进程内的后台任务,或者需要立即执行的任务。请参阅 [后台任务指南](https://developer.android.google.cn/guide/background/) 以明确您需要哪种解决方案。 21 | 22 | 查看 [发行说明](https://developer.android.google.cn/jetpack/androidx/releases/work#declaring_dependencies) 以了解如何将 WorkManager 导入 Android 项目。 23 | 24 | ## 话题 25 | 26 | #### [WorkManager 基础知识](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_9_WorkManager/3_2_9_2_Basics.md) 27 | 28 | 使用 WorkManager 来调度特定条件下执行的单次任务,或者是定期运行的任务。 29 | 30 | #### [WorkManager 高级进阶](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_9_WorkManager/3_2_9_3_Advanced.md) 31 | 32 | 设置任务的链式序列(chained sequences),设置可传参并返回值的任务,设置指定的、唯一的任务序列。 33 | 34 | #### [从 Firebase JobDispatcher 迁移](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_9_WorkManager/3_2_9_4_Migrating_from_Firebase_JobDispatcher.md) 35 | 36 | 更新现有应用,以便使用 WorkManager 而不是 Firebase JobDispatcher。 37 | 38 | ## 更多资源 39 | 40 | ### 示例 41 | 42 | - [WorkManagerSample](https://github.com/googlesamples/android-architecture-components/tree/master/WorkManagerSample),一款简单的图像处理应用 43 | - [Sunflower](https://github.com/googlesamples/android-sunflower),一款演示各种架构组件用法的示例应用,包括 WorkManager。 44 | 45 | ### Codelabs 46 | 47 | - 使用 WorkManager,支持 [Kotlin](https://codelabs.developers.google.com/codelabs/android-workmanager-kt/) 和 [Java](https://codelabs.developers.google.com/codelabs/android-workmanager/) 代码 48 | 49 | ### 视频 50 | 51 | - [使用 WorkManager](https://www.youtube.com/watch?v=83a4rYXsDs0),来源:2018 Android 开发者峰会 52 | 53 | ### 博客 54 | 55 | - [介绍 WorkManager](https://medium.com/androiddevelopers/introducing-workmanager-2083bcfc4712) 56 | -------------------------------------------------------------------------------- /ANDROID_JETPACK/C_AndroidX/4_Jetpack_Compose.md: -------------------------------------------------------------------------------- 1 | # Jetpack 组件 2 | > 原文链接:[Jetpack Compose | Android Developers](https://developer.android.google.cn/jetpack/compose) 3 | 4 | **用于构建 UI 的声明性工具包** 5 | 6 | Jetpack 组件(Compose)是一个非捆绑工具包,旨在简化 UI 开发。它结合了响应式编程模型和 Kotlin 编程语言的简洁性及易用性。 7 | 8 | > **注意:** Jetpack 组件目前处于早期探索的 pre-alpha 阶段。它的 API 层面尚未最终确定,不应用于生产。 9 | 10 | [探索 JETPACK COMPOSE](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/ui/README.md) 11 | 12 | ## 核心理念 13 | 14 | **简洁易用的Kotlin** 15 | 16 | 基于 Kotlin 带来的好处——简洁、安全、并与Java完全互操作。旨在大幅减少必须编写的样板代码量,以便您可以专注于应用程序代码,并帮您避免各种类型的错误。 17 | 18 | **声明性** 19 | 20 | 完全声明用于定义 UI 组件,包括绘制和创建自定义布局。只需将 UI 描述为一组可组合函数,框架就可以处理 UI 优化并自动更新视图层次结构。 21 | 22 | **兼容性** 23 | 24 | 与现有视图兼容,因此您可以混合搭配,并按照自己的意愿采用直接访问所有 Android 和 Jetpack 的 API。 25 | 26 | **创造漂亮的应用** 27 | 28 | 从一开始就采用开箱即用的材料化设计(Material Design)和动画设计,因此可以轻松创建充满动感的漂亮应用程序。 29 | 30 | **加速开发** 31 | 32 | 通过编写更少的代码并使用 Apply Changes 和实时预览等工具来加速开发。 33 | 34 | ## 快速浏览 35 | 36 | Jetpack 组件正在 [Android开源项目](https://android.googlesource.com/platform/frameworks/support/) 中开发。它有两个主要组成部分: 37 | - 组件 UI 库,其中包含核心的 UI 工具包,包括布局、输入、文本、动画、样式、小部件和图形。 38 | - 组件编译器,一个自定义的 Kotlin 编译器插件,它采用可组合的函数,并自动更新 UI 层次结构。 39 | 40 | 组件(Compose)应用程序由可组合函数构成,可将应用程序数据转换为 UI 层次结构。只需一个函数即可创建新的 UI 组件。 41 | 42 | 要创建可组合函数,只需将 `@Composable` 注解添加到函数名上即可。在底层,组件使用自定义的 Kotlin 编译器插件,因此当底层数据发生更改时,可以重新调用可组合函数以生成更新的 UI 层次结构。下面的简单示例将一个字符串打印到屏幕上。 43 | 44 | ```kotlin 45 | import androidx.compose.* 46 | import androidx.ui.core.* 47 | 48 | @Composable 49 | fun Greeting(name: String) { 50 | Text ("Hello $name!") 51 | } 52 | ``` 53 | 54 | Jetpack 组件 UI 库的 API 位于 AOSP [frameworks/support/ui](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/ui/) 目录中。组件编译器和运行时代码可以在 [frameworks/support/compose](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/compose/) 中找到。 55 | 56 | ## 组件 UI 库 57 | 58 | Jetpack 组件 UI 库包含以下模块: 59 | 60 | **android-text/** 61 | 62 | Android 特定于文本堆栈的实现 63 | 64 | **android-view/** 65 | 66 | 现有 Android 视图的包装器和适配器 67 | 68 | **animation/** 69 | 70 | 动画组件 71 | 72 | **animation-core/** 73 | 74 | 动画系统的内部声明 75 | 76 | **core/** 77 | 78 | 系统中使用的基类包括基本元素、图形和绘画 79 | 80 | **framework/** 81 | 82 | 基本组件由系统作为构建块公开。这包括绘图、布局、文本等。 83 | 84 | **layout/** 85 | 86 | 基本布局组件 87 | 88 | **material/** 89 | 90 | 根据材料化设计规范构建的 UI 组件集 91 | 92 | **platform/** 93 | 94 | 内部实现,允许 Android 实现与主机端测试分离 95 | 96 | **test/** 97 | 98 | 测试框架 99 | 100 | **text/** 101 | 102 | 文本引擎 103 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_1_Overview.md: -------------------------------------------------------------------------------- 1 | # Navigation 概览 2 | > 原文链接:[Navigation | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/navigation) 3 | 4 | 导航是应用设计中的至关重要的部分。使用导航,您可以设计出用户在应用中的各个部分之间跳转、进入和回退的交互。 5 | 6 | ## Navigation 架构组件 7 | 8 | Navigation 架构组件能帮您在应用中实现常见的复杂导航,从而更轻松地为用户提供可预测的连贯体验。 9 | 10 | Navigation 处理您应用的 *目的地(destination)* 之间的导航,即:您应用中任何一个用户能导航到的地方。尽管目的地常常是代表特定页面的 `Fragment`,Navigation 组件也支持下列其他目的地类型: 11 | 12 | * Activity。 13 | * 导航图(graph)和子图(subgraph):当目的地是图/子图时,用户被导航到该图/子图的起始目的地。 14 | * [自定义的目的地类型](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_6_Add_support_for_new_destination.md) 15 | 16 | 这些目的地是通过 *动作(action)* 连接起来的。一组目的地及其之间的动作构成了一个应用的 *导航图(navigation graph)*。 17 | 18 | Navigation 架构组件还提供了如下所示的其他好处: 19 | 20 | * 处理 Fragment transaction。 21 | * 默认情况下就能正确处理“向上”和“向后”行为。 22 | * 为动画和转场(transition)提供标准化的资源。 23 | * 把深层链接(deep link)作为一级操作来对待。 24 | * 以最小的额外代价,提供诸如导航抽屉和底部导航栏等导航 UI 样式。 25 | * 使用 Android Studio 的 [Navigation 编辑器](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_2_Implement_Navigation_with_the_Navigation_Architecture_Component.md) 来可视化编辑导航图。 26 | 27 | > **注意**:欲在 Android Studio 中使用 Navigation 架构组件,您必须使用 Android Studio 3.3 或更高版本。 28 | 29 | ## 导航的原则 30 | 31 | Navigation 架构组件是基于以下的设计原则: 32 | 33 | ### 固定的起始目的地 34 | 35 | 应用应当有一个固定的 *起始目的地(start destination)*。它是用户在启动您的应用时看到的页面,也是用户使用返回键返回到桌面/启动器前所看到的最后一个页面。 36 | 37 | > **注意**:应用可能有一个一次性的初始设置,或者一系列的登录页面。这些有条件的页面应当不被认作您应用的起始目的地。 38 | 39 | ### 导航状态应能表示为一个目的地的堆栈 40 | 41 | 一个 *导航堆栈(navigation stack)* 的栈底应当是起始目的地,而栈顶则是当前的目的地。 42 | 43 | 改变导航堆栈的操作应当总是工作在栈顶:它要么是把一个新的目的地 push 到堆栈内,要么则是把最顶端的目的地从堆栈内 pop 出去。 44 | 45 | ### “向上”按钮永远不会退出应用 46 | 47 | 如果一个用户正处于起始目的地,那么“向上”按钮就不应显示。当您的应用是被一个深层链接(deeplink)启动到另一个应用的任务上时,“向上”按钮应把用户带到当前页面在您应用架构中的上一层,而不是把用户带回到启动它的另一个应用。 48 | 49 | ### 深层链接和导航到同一个目的地应当生成相同的堆栈 50 | 51 | 无论用户是如何到达某个目的地的,他都应当能使用”向后“或”向上“按钮来一步步回到最初的目的地。 52 | 53 | 当使用深层链接时,任何已经存在的导航堆栈都将被移除,并被深层链接的导航堆栈所代替。 54 | 55 | ## 开始动手 56 | 57 | * [Navigation 代码实验室](https://codelabs.developers.google.com/codelabs/android-navigation?hl=zh-cn) 58 | * [用 Navigation 架构组件来实现导航](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_2_Implement_Navigation_with_the_Navigation_Architecture_Component.md) 59 | 60 | ## 其他资源 61 | 62 | * [Android Jetpack:使用 Navigation 控制器来管理 UI 导航](https://www.youtube.com/watch?v=8GCXtCjtg40&hl=zh-cn) 63 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_7_Room_Persistence_Library.md: -------------------------------------------------------------------------------- 1 | # Room 数据持久化库 2 | > 原文链接:[Room Persistence Library | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/room) 3 | 4 | [Room](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_10_App_data_%26_files/3_10_5_Save_data_in_a_local_database/3_8_5_5_Save_data_in_a_local_database/3_8_5_5_1_Overview.md) 数据持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 全部功能的同时实现更稳健的数据库访问。 5 | 6 | 该库帮您在设备上创建您应用数据的缓存,并让该缓存充当您应用的唯一数据来源,从而让用户能访问到关键信息的一致性副本,无论他是否有网络连接。 7 | 8 | > **注意**:欲将 Room 导入您的 Android 项目,请参阅 [Room 发布说明](https://developer.android.google.cn/jetpack/androidx/releases/room)。 9 | 10 | ## 深入文档 11 | 12 | 有关将 Room 的功能运用于程序数据持久化存储的指导方案,请参阅 [Room](https://developer.android.google.cn/training/data-storage/room/index.html) 培训指南。 13 | 14 | ## 其他资源 15 | 16 | 要了解有关 Room 的更多信息,请参阅以下其他资源。 17 | 18 | ### 示例 19 | - [Sunflower](https://github.com/googlesamples/android-sunflower), 一款 Android Jetpack 最佳实践的示例应用。 20 | - [Room migration sample](https://github.com/googlesamples/android-architecture-components/tree/master/PersistenceMigrationsSample)(Room 迁移示例) 21 | - Room & RxJava Sample [(Java)](https://github.com/googlesamples/android-architecture-components/tree/master/BasicRxJavaSample) [(Kotlin)](https://github.com/googlesamples/android-architecture-components/tree/master/BasicRxJavaSampleKotlin) 22 | 23 | ### Codelabs 24 | - Android Room with a View [(Java)](https://codelabs.developers.google.com/codelabs/android-room-with-a-view) [(Kotlin)](https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin) 25 | - [Android Persistence codelab](https://codelabs.developers.google.com/codelabs/android-persistence/index.html?index=..%2F..%2Findex#0) 26 | 27 | ### 博客 28 | - [Introducing Android Sunflower](https://medium.com/androiddevelopers/introducing-android-sunflower-e421b43fe0c2)(Jetpack 最佳实践的园艺应用) 29 | - [Room + Time](https://medium.com/androiddevelopers/room-time-2b4cf9672b98?source=false---------7)(Room 和时间信息结合) 30 | - [Incrementally migrate from SQLite to Room](https://medium.com/androiddevelopers/incrementally-migrate-from-sqlite-to-room-66c2f655b377)(从 SQLite 逐步迁移到 Room) 31 | - [7 Pro-tips for Room](https://medium.com/androiddevelopers/7-pro-tips-for-room-fbadea4bfbd1)(7 个有关 Room 的专业提示) 32 | - [Understanding migrations with Room](https://medium.com/androiddevelopers/understanding-migrations-with-room-f01e04b07929)(了解 Room 迁移) 33 | - [Testing Room migrations](https://medium.com/androiddevelopers/testing-room-migrations-be93cdb0d975)(测试 Room 迁移) 34 | - [Room + RxJava](https://medium.com/androiddevelopers/room-rxjava-acb0cd4f3757)(Room 和 RxJava 结合) 35 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_3_Navigation/3_3_6_Add_support_for_new_destination.md: -------------------------------------------------------------------------------- 1 | # 支持新的目的地类型 2 | > 原文链接:[Add support for new destination types | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/navigation/navigation-add-new) 3 | 4 | [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 依赖一个或多个 [Navigator](https://developer.android.google.cn/reference/androidx/navigation/Navigator.html?hl=zh-cn) 对象来实行导航操作。 5 | 6 | 在默认情况下,所有的 [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 都支持使用 [`ActivityNavigator`](https://developer.android.google.cn/reference/androidx/navigation/ActivityNavigator.html?hl=zh-cn) 类及其内部类 [ActivityNavigator.Destination](https://developer.android.google.cn/reference/androidx/navigation/ActivityNavigator.Destination.html?hl=zh-cn) 导航到另一个 activity 的方式,来离开当前的导航图。 7 | 8 | 欲导航到其他类型的目的地,您必须为 [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 添加一个或多个新的 [Navigator](https://developer.android.google.cn/reference/androidx/navigation/Navigator.html?hl=zh-cn)。例如,当您把 fragment 作为目的地时,[`NavHostFragment`](https://developer.android.google.cn/reference/androidx/navigation/fragment/NavHostFragment.html?hl=zh-cn) 会自动为其 [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 添加 [`FragmentController`](https://developer.android.google.cn/reference/androidx/navigation/fragment/FragmentNavigator.html?hl=zh-cn) 类。 9 | 10 | 欲为 [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn) 添加新的 [Navigator](https://developer.android.google.cn/reference/androidx/navigation/Navigator.html?hl=zh-cn) 对象,您必须使用各自 `NavController` 类的 [`getNavigatorProvider`](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn#getNavigatorProvider()) 方法,接着再调用其 [`addNavigator()`](https://developer.android.google.cn/reference/androidx/navigation/NavigatorProvider.html?hl=zh-cn) 方法。下例展示如何将一个虚构的 `CustomNavigator` 添加到一个 [NavController](https://developer.android.google.cn/reference/androidx/navigation/NavController.html?hl=zh-cn): 11 | 12 | ```java 13 | CustomNavigator customNavigator = new CustomNavigator(); 14 | navController.getNavigatorProvider().addNavigator(customNavigator); 15 | ``` 16 | 17 | ```kotlin 18 | val customNavigator = CustomNavigator() 19 | navController.navigatorProvider += customNavigator 20 | ``` 21 | 22 | 大多数 [Navigator](https://developer.android.google.cn/reference/androidx/navigation/Navigator.html?hl=zh-cn) 都有一个目的地的内部类,该内部类可以被用来指定和您目的地所独有的特定属性。欲了解更多有关目的地内部类的信息,请参阅相应 [Navigator](https://developer.android.google.cn/reference/androidx/navigation/Navigator.html?hl=zh-cn) 类的参考文档。 23 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_1_Overview.md: -------------------------------------------------------------------------------- 1 | # Android 架构组件 2 | > 原文链接:[Android Architecture Components | Android Developers](https://developer.android.google.cn/topic/libraries/architecture/) 3 | 4 | Android 架构组件是一组帮助您构建具有稳健性、可测试性、可维护性应用的类库。先从如下的两个话题开始吧:1、管理 UI 组件生命周期,2、处理数据持久化。 5 | 6 | - 轻松管理您的应用生命周期。新的 [生命周期感知(lifecycle-aware)组件](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_4_Handling_Lifecycles.md) 能帮您管理 activity 和 fragment 的生命周期。您的应用能够平稳渡过配置变更(configuration change)、避免内存泄漏,还能轻松将数据载入 UI。 7 | - 使用 [LiveData](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_5_LiveData.md) 构建数据对象,以便在底层数据库变动时通知视图。 8 | - [ViewModel](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_9_ViewModel.md) 可在应用旋转屏幕时依然保持和 UI 相关的数据。 9 | - [Room](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_8_Room_Persistence_Library.md) 是一个 SQLite 对象关系映射类库。用它来避免八股代码,并将 SQLite 数据表的数据映射为 Java 对象。Room 能对 SQLite 语句进行编译时检查,并返回 RxJava、Flowable 和 LiveData 的可观测对象。 10 | 11 | ## 其他资源 12 | 13 | 欲知更多有关架构组件的信息,请参阅下列资源。 14 | 15 | ### 示例 16 | - [Sunflower](https://github.com/googlesamples/android-sunflower),一款用 Android Jetpack 来进行最佳实践开发演示的园艺应用。 17 | - [Android Architecture Components basic sample](https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample) 18 | - [(更多...)](https://developer.android.google.cn/topic/libraries/architecture/additional-resources.html#samples) 19 | 20 | ### Codelabs(代码实验室) 21 | - Android Room with a View [(Java)](https://codelabs.developers.google.com/codelabs/android-room-with-a-view) [(Kotlin)](https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin)(Room 和视图层结合) 22 | - [Android Data Binding codelab](https://codelabs.developers.google.com/codelabs/android-databinding)(数据绑定代码示例) 23 | - [(更多...)](https://developer.android.google.cn/topic/libraries/architecture/additional-resources.html#codelabs) 24 | 25 | 26 | ### 培训 27 | - [Udacity: Developing Android Apps](https://www.udacity.com/course/new-android-fundamentals--ud851)(优达城:开发 Android 应用的培训) 28 | 29 | ### 博客文章 30 | - [Announcing Architecture Components 1.0 Stable](https://android-developers.googleblog.com/2017/11/announcing-architecture-components-10.html)(Android 架构组件 1.0 稳定版) 31 | - [Android and Architecture](https://android-developers.googleblog.com/2017/05/android-and-architecture.html)(Android 架构) 32 | - [(更多...)](https://developer.android.google.cn/topic/libraries/architecture/additional-resources.html#blogs) 33 | 34 | ### 视频 35 | - [Android Jetpack: what's new in Architecture Components (Google I/O '18)](https://www.youtube.com/watch?v=pErTyQpA390)(Android Jetpack:架构组件新特性(Google 2018 开发者大会)) 36 | - [Android Jetpack: easy background processing with WorkManager (Google I/O '18)](https://www.youtube.com/watch?v=IrKoBFLwTN0)(Android Jetpack:用 WorkManager 轻松处理后台任务(Google 2018 开发者大会)) 37 | - [(更多...)](https://developer.android.google.cn/topic/libraries/architecture/additional-resources.html#videos) 38 | -------------------------------------------------------------------------------- /DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_3_Data_Binding_Library/3_2_3_2_Get_Started.md: -------------------------------------------------------------------------------- 1 | # 开始动手 2 | > 原文链接:[Get started | Android Developers](https://developer.android.google.cn/topic/libraries/data-binding/start) 3 | 4 | 本小节您将学习如何准备好包括设置 Android Studio 在内的开发环境,用于使用数据绑定(Data Binding)库。 5 | 6 | 数据绑定库既提供了灵活性,又满足了广泛的实用性——它是一个支持库,因此您可以在运行 Android 4.0 (API 版本 14)及更新系统的设备上使用它。 7 | 8 | 我们推荐您在项目中使用最新版本的 Android Gradle 插件,然而,只有 1.5.0 及更高版本的插件才支持数据绑定。欲了解更多信息,请参阅[升级 Android Gradle 插件](https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin)。 9 | 10 | ## 构建环境 11 | 12 | 欲开始使用数据绑定,请在 Android SDK 管理器中从**支持库代码仓库**下载该库。欲了解更多信息,请参阅[更新 IDE 和 SDK 工具](https://developer.android.google.cn/studio/intro/update)*(请选择简体中文)*。 13 | 14 | 欲配置您的应用来使用数据绑定,向您的应用模块的 `build.gradle` 中加入 `dataBinding` 元素,如下所示: 15 | 16 | ```gradle 17 | android { 18 | ... 19 | dataBinding { 20 | enabled = true 21 | } 22 | } 23 | ``` 24 | 25 | > **注意**:即使应用模块并不直接使用数据绑定,您也必须为那些使用了依赖于数据绑定库的模块配置数据绑定。 26 | 27 | ## Android Studio 对于数据绑定的支持 28 | 29 | Android Studio 支持数据绑定代码的多种编辑功能。如下所示: 30 | 31 | * 语法高亮 32 | * 表达式语法错误标记 33 | * XML 代码补全 34 | * 参考,包括[导航](https://www.jetbrains.com/help/idea/2017.1/navigation-in-source-code.html)(例如跳转到定义)和[快速文档](https://www.jetbrains.com/help/idea/2017.1/viewing-inline-documentation.html)。 35 | 36 | > **警告**:数组和[泛型](https://docs.oracle.com/javase/tutorial/java/generics/types.html),例如 [`Observable`](https://developer.android.google.cn/reference/android/databinding/Observable`) 类,可能不正确地显示错误信息。 37 | 38 | 只要您提供了数据绑定表达式的缺省值的话,**布局编辑器(Layout Editor)**中的**预览(Preview)**窗格就能展示该缺省值。例如,**预览(Preview)**窗格在 `TextView` 部件上展示了值 `你瞅啥`,如下例所示: 39 | 40 | ```xml 41 | 44 | ``` 45 | 46 | 如果您只在项目的设计阶段才需要展示缺省值,那么请使用 `tools` 属性,而非表达式的缺省值,如 [Tools 属性参考](https://developer.android.google.cn/studio/write/tool-attributes)所述。 47 | 48 | ## 新的数据绑定编译器 49 | 50 | `3.1.0-alpha06` 版本的 Android Gradle 插件包含了一个新的数据绑定编译器,用于生成绑定类。新的编译器增量地创建 binding 类,这在大多数情况下都能加速构建过程。欲了解更多有关 binding 类的信息,请参阅[自动生成的绑定类](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/DOCS/B_Guides/3_Core_topics/3_2_Architecture_Components/3_2_3_Data_Binding_Library/3_2_3_5_Generated_binding_classes.md)。 51 | 52 | 之前版本的数据绑定编译器的编译步骤和您自己编写的代码的编译步骤相同。如果您自己编写的代码编译失败了,您可能会得到多个报告“绑定类未找到”的错误。而新的编译器会在编译您的代码之前就生成绑定类,从而防止了这些错误。 53 | 54 | 欲启用新的数据绑定编译器,请将如下配置代码加入您的 `gradle.properties` 文件: 55 | 56 | ```gradle 57 | android.databinding.enableV2=true 58 | ``` 59 | 60 | 您还能通过添加如下参数来在您的 Gradle 命令中启用新的编译器: 61 | 62 | ```gradle 63 | -Pandroid.databinding.enableV2=true 64 | ``` 65 | 66 | > **注意**:Android Studio 3.1 所包含的新的数据绑定编译器并不向后兼容。欲利用增量编译的特性,您需要启用该功能来生成您的所有绑定类。然而,3.2 版本的 Android Gradle 插件所包含的新的编译器能够向后兼容之前版本所生成的绑定类,该编译器在缺省条件下是启用的。 67 | 68 | 当您启用新的数据绑定编译器时,会有如下的变化: 69 | 70 | * Android Gradle 插件在编译您自己编写的代码之前就为您的布局生成绑定类。 71 | * 如果一个布局被多个目标资源配置(target resource configuration)所包含,那么数据绑定库会将 `android.view.View` 作为所有资源 id 相同但视图类型不同的视图的默认视图类型。 72 | * 类库模块的绑定类会被编译并打包到相应的 AAR 文件中。依赖于这些类库模块的应用模块无须再次生成这些绑定类。欲了解更多有关 AAR 文件的信息,请参阅[创建 Android 库](https://developer.android.google.cn/studio/projects/android-library)*(请选择简体中文)*。 73 | * 一个模块的绑定适配器(binding adapter)不能再改变该模块的依赖的适配器行为。绑定适配器只会影响其模块及其消费者的代码。 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /ANDROID_JETPACK/A_Overview.md: -------------------------------------------------------------------------------- 1 | # Android Jetpack 2 | > 原文链接:[Android Jetpack | Android Developers](https://developer.android.google.cn/jetpack/) 3 | 4 | Jetpack 是一组包含了类库、工具和架构指导的集合,用来协助您轻松构建出色的 Android 应用。由于它已经提供了常用的基础框架,您可以集中精力开发您的应用所特有的业务代码。 5 | 6 | [开始](https://developer.android.google.cn/jetpack/docs/getting-started/) 7 | 8 | [观看介绍视频](https://www.youtube.com/watch?v=LmkKFCfmnhQ&feature=youtu.be) 9 | 10 | * 加速开发 11 | 12 | Jetpack 的诸多组件(component)可以分别独自使用,而且作为提升您生产力的有机统一的整体,在 Kotlin 编程语言的助力下更是如虎添翼。 13 | 14 | * 去除“八股代码”(boilerplate code) 15 | 16 | Jetpack 已为您一一打理好各种枯燥乏味的业务,诸如:后台任务、导航(navigation)和生命周期管理(lifecycle management),等等。 17 | 18 | * 构建优质而稳健的应用 19 | 20 | 遵循现代设计规范,Jetpack 的组件减少了应用崩溃,降低了内存占用,还支持向后兼容(backwards compatibility)。 21 | 22 | ## Android Jetpack 组件(component) 23 | 24 | Jetpack 组件是一组类库的集合,它们可以分别独自使用,而且作为提升您生产力的有机统一的整体,在 Kotlin 编程语言的助力下更是如虎添翼。是将其全员出场还是自由混搭,您说了算! 25 | 26 | ### 地基(Foundation) 27 | 28 | 地基组件提供核心的系统功能、Kotlin 拓展、Dalvik 可执行文件分包(multidex)支持和自动化测试。 29 | 30 | * [**AppCompat**](https://developer.android.google.cn/topic/libraries/support-library/packages.html#v7-appcompat) 31 | 32 | 优雅地向下兼容到更老的 Android 版本。 33 | 34 | * [**Android KTX**](https://github.com/Android-Jetpack-Chinese-Translation/android-jetpack-chinese-translation/blob/master/PLATFORM/E_Kotlin/4_Android_KTX.md) 35 | 36 | 编写更精炼、更地道的 Kotlin 代码。 37 | 38 | * [**Dalvik 可执行文件分包**](https://developer.android.google.cn/studio/build/multidex)(请选择简体中文) 39 | 40 | 为应用提供 Dalvik 可执行文件分包支持。 41 | 42 | * [**测试支持库**](https://developer.android.google.cn/topic/libraries/testing-support-library)(请选择简体中文) 43 | 44 | 一套 Android 自动测试框架,用于单元测试和运行时 UI 测试。 45 | 46 | ### 架构(Architecture) 47 | 48 | 架构组件帮助您管理 UI 组件的生命周期,处理数据持久化(data persistence),等等。 49 | 50 | * **数据绑定(Data binding)** 51 | 52 | 声明式(declaratively)地将可被监听的数据(observable data)绑定到 UI 元素。 53 | 54 | * **生命周期** 55 | 56 | 管理您的 activity 和 fragment 的生命周期。 57 | 58 | * **LiveData** 59 | 60 | 当其来源的数据库发生变化时,能够自动通知视图组件(view)。 61 | 62 | * **导航(Navigation)** 63 | 64 | 应用内导航的一切要素。 65 | 66 | * **分页(Paging)** 67 | 68 | 按需求逐步地从您的数据源加载信息。 69 | 70 | * **Room** 71 | 72 | 流畅的 SQLite 数据库连接。 73 | 74 | * **视图模型(ViewModel)** 75 | 76 | 用一种生命周期感知(lifecycle-conscious)的方式来管理 UI 相关的数据。 77 | 78 | * **后台任务管家(WorkManager)** 79 | 80 | 管理您的 Android 后台任务。 81 | 82 | ### 行为(Behavior) 83 | 84 | 行为组件帮助您设计稳健、可测试且可维护的应用。 85 | 86 | * **下载管家(Download manager)** 87 | 88 | 安排并管理大文件的下载。 89 | 90 | * **媒体和回放(Media & playback)** 91 | 92 | 向后兼容的用于媒体回放和路由(routing)的API,包括 Google Cast。 93 | 94 | * **通知 (Notification)** 95 | 96 | 向后兼容并支持可穿戴设备(Wear)和驾驶设备(Auto)的通知 API。 97 | 98 | * **权限(Permissions)** 99 | 100 | 用于检查和请求应用权限的兼容性 API。 101 | 102 | * **分享(Sharing)** 103 | 104 | 提供一个适用于应用操作栏(action bar)的分享操作(action)。 105 | 106 | * **切片(Slices)** 107 | 108 | 创建灵活的 UI 元素,用于在应用之外展示其数据。 109 | 110 | ### 交互(UI) 111 | 112 | 交互组件使您轻易构造出易于上手、体验美妙的应用。 113 | 114 | * **动画和渐变(Animation & transitions)** 115 | 116 | 将部件(widget)和渐变跨页面展示。 117 | 118 | * **驾驶设备(Auto)** 119 | 120 | 帮助您为驾驶设备开发应用的组件。 121 | 122 | * **绘文字(Emoji)** 123 | 124 | 在旧设备上也能使用最新潮流的绘文字。 125 | 126 | * **Fragment** 127 | 128 | 可组合 UI 设计(composable UI)的一个基本单元。 129 | 130 | * **调色板(Palette)** 131 | 132 | 从色彩组合中提取出有用的信息。 133 | 134 | * **电视(TV)** 135 | 136 | 帮助您为电视开发应用的组件。 137 | 138 | * Google的**可穿戴设备操作系统(Wear OS)** 139 | 140 | 帮助您为可穿戴设备开发应用的组件。 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /ANDROID_JETPACK/B_Get_started/1_Build_your_first_Android_Jetpack_app.md: -------------------------------------------------------------------------------- 1 | # “Hello, Jetpack”:开发您的第一个 Jetpack 应用 2 | > 原文链接:["Hello, Jetpack": Build your first Jetpack app | Android Developers](https://developer.android.google.cn/jetpack/docs/getting-started) 3 | 4 | 本章节将通过一个叫做 [ComponentsBasicSample](https://developer.android.google.cn/jetpack/docs/ComponentsBasicSample.zip) 的 Kotlin 案例应用,来向您展示如何开发一个基于 Jetpack 的简单应用。 5 | 6 | 欲了解如何开发一般的应用,请参考[构建您的第一个应用](https://developer.android.google.cn/training/basics/firstapp/)。欲详细了解本章节所使用的类(class),请参阅 [Android 应用架构组件](https://developer.android.google.cn/jetpack/arch/)。 7 | 8 | ## 搭建您的应用 9 | 按照以下步骤来搭建您的应用,并为其提供 Jetpack 支持。 10 | 11 | 1. 启动3.2或更高版本的 [Android Studio](https://developer.android.google.cn/studio/preview),照常选择 ***Create Android Project*** 、 ***Target Android Devices*** 并填入所需信息。 12 | 13 | > 如果您打算使用 Kotlin 来开发应用,请记得在 ***Create Android Project*** 页面勾选 ***Include Kotlin Support*** 。 14 | 15 | 2. ***Create Android Project*** 的下一个页面是 ***Add an Activity to Mobile*** ,该页面提供了许多用于创建应用的模板。如图一所示的 ***Activity & Fragment + ViewModel*** 模板能够方便地将 Jetpack 整合进您的应用,选择它并点击 ***Next*** 。 16 | 17 | ![图一:Activity & Fragment + ViewModel 模板](https://developer.android.google.cn/images/jetpack/gs-1.png) 18 | 19 | 3. 在 ***Configure Activity*** 页面,输入应用初始 Activity、Fragment 和 ViewModel 的名称。您也可以选择性地输入 fragment 的 package 路径。之后点击 ***Finish*** 。 20 | ![图二:Activity & Fragment + ViewModel 模板的 Configure Activity 页面](https://developer.android.google.cn/images/jetpack/gs-2.png) 21 | 22 | 在您的项目(Project)视图中打开 `java` 文件夹,如图三所示,应用初始即含有三个类:`StartActivity`,`StartFragment` 和 `StartViewModel`。 23 | ![图三:Activity & Fragment + ViewModel 模板初始化的类](https://developer.android.google.cn/images/jetpack/gs-3.png) 24 | 25 | - `StartActivity` 是您应用的入口。它是一个 [`Activity`](https://developer.android.google.cn/reference/android/app/Activity) 的桩(Stub),用来充当您应用初始界面的 Fragment 的容器。 26 | - `StartFragment` 是您初始界面的 [`Fragment`](https://developer.android.google.cn/reference/android/app/Fragment) 的桩。 27 | - `StartViewModel` 是您初始 [`ViewModel`](https://developer.android.google.cn/reference/android/arch/lifecycle/ViewModel) 的桩。 28 | 29 | ## 利用 Jetpack 的优势 30 | 上述组件准备就绪,您可以选择按如下的例子所示来实现您的 ViewModel 对象: 31 | 32 | ```Kotlin 33 | class StartViewModel : ViewModel() { 34 | private val _data = MutableLiveData() 35 | val data: LiveData 36 | get() = _data 37 | 38 | init { 39 | _data.value = "Hello, Jetpack!" 40 | } 41 | } 42 | ``` 43 | 44 | 如果您的应用包含不止一个页面,您可以导入 [`Navigation`](https://developer.android.google.cn/topic/libraries/architecture/navigation) 类来实现 Fragment 的导航。下面的代码示范了如何实现导航逻辑: 45 | 46 | ```Kotlin 47 | // Set up a click listener on the login button 48 | view?.findViewById