{"id":11977,"date":"2023-11-18T17:50:13","date_gmt":"2023-11-18T09:50:13","guid":{"rendered":"https:\/\/blog.iyatt.com\/?p=11977"},"modified":"2024-05-10T10:05:12","modified_gmt":"2024-05-10T02:05:12","slug":"%e5%85%a5%e5%9d%91-android","status":"publish","type":"post","link":"https:\/\/blog.iyatt.com\/?p=11977","title":{"rendered":"Android \u5b66\u4e60\u8bb0\u5f55\uff08\u7f16\u8f91\u4e2d\uff09"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#1_%E5%89%8D%E8%A8%80\" >1 \u524d\u8a00<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#2_%E7%8E%AF%E5%A2%83\" >2 \u73af\u5883<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#3_%E8%B0%83%E8%AF%95\" >3 \u8c03\u8bd5<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#31_%E5%AE%9E%E4%BD%93%E6%89%8B%E6%9C%BA\" >3.1 \u5b9e\u4f53\u624b\u673a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#32_%E5%AD%90%E7%B3%BB%E7%BB%9F\" >3.2 \u5b50\u7cfb\u7edf<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#4_%E6%9D%82%E9%A1%B9%E8%AF%B4%E6%98%8E\" >4 \u6742\u9879\u8bf4\u660e<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#41_%E9%95%BF%E5%BA%A6%E5%8D%95%E4%BD%8D\" >4.1 \u957f\u5ea6\u5355\u4f4d<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#42_%E5%BF%AB%E6%8D%B7%E9%94%AE\" >4.2 \u5feb\u6377\u952e<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#5_%E6%8E%A2%E7%B4%A2\" >5 \u63a2\u7d22<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#51_hello_world\" >5.1 hello world<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#52_%E5%88%97%E5%B8%83%E5%B1%80\" >5.2 \u5217\u5e03\u5c40<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#53_%E6%B7%BB%E5%8A%A0%E5%9B%BE%E7%89%87\" >5.3 \u6dfb\u52a0\u56fe\u7247<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#54_%E5%B8%83%E5%B1%80_%E2%80%93_%E6%96%87%E7%AB%A0\" >5.4 \u5e03\u5c40 &#8211; \u6587\u7ae0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#55_%E5%B8%83%E5%B1%80_%E2%80%93_%E4%BB%BB%E5%8A%A1%E5%AE%8C%E6%88%90%E9%A1%B5%E9%9D%A2\" >5.5 \u5e03\u5c40 &#8211; \u4efb\u52a1\u5b8c\u6210\u9875\u9762<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blog.iyatt.com\/?p=11977\/#56_%E5%B8%83%E5%B1%80_%E2%80%93_%E8%B1%A1%E9%99%90\" >5.6 \u5e03\u5c40 &#8211; \u8c61\u9650<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"1_%E5%89%8D%E8%A8%80\"><\/span>1 \u524d\u8a00<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>\u524d\u9762 9 \u6708\u4efd\u56e0\u4e3a\u63a5\u5355\u7684\u539f\u56e0\uff0c\u73b0\u5b66\u4e86 Java\uff0c\u57fa\u7840\u4e0a\u5e94\u8be5\u6ca1\u5565\u5927\u95ee\u9898\u4e86\u3002\u524d\u51e0\u5929\u53c8\u6298\u817e\u4e86\u4e0b ESP32\uff0c\u641e\u4e86\u4e2a\u7b80\u5355\u7684\u65f6\u949f\u663e\u793a\uff0c\u652f\u6301\u8054\u7f51\u540c\u6b65\u65f6\u95f4\uff0c\u4f46\u662f\u8003\u8651\u5230\u8981\u8fde\u63a5\u7684 WiFi \u5728\u7a0b\u5e8f\u91cc\u5199\u6b7b\uff0c\u5982\u679c\u540e\u671f\u8981\u6539\u8fde\u63a5\u7684 WiFi \u8fd8\u5f97\u91cd\u5199\u4fee\u6539\u540e\u4e0b\u8f7d\u7a0b\u5e8f\uff0c\u5e76\u4e0d\u65b9\u4fbf\u3002\u7ed3\u5408\u5bb6\u7535\u7684\u4f53\u9a8c\uff0c\u7a7a\u8c03\u3001\u70ed\u6c34\u5668\u7b49\u7b49\u8fde\u63a5 WiFi \u662f\u901a\u8fc7\u624b\u673a\u8bbe\u7f6e\u7136\u540e\u4f7f\u7528\u84dd\u7259\u4f20\u8f93\u8fc7\u53bb\uff0c\u8fd9\u6837\u5c31\u633a\u65b9\u4fbf\u3002\u56e0\u6b64\u6253\u7b97\u62bd\u53d6\u4e00\u4e9b\u7a7a\u4f59\u65f6\u95f4\uff0c\u5148\u5b66\u4e60\u4e00\u4e0b Kotlin\uff0c\u518d\u5165 Android\u3002<br \/>\n\u73b0\u5728 Android \u5f00\u53d1\u7684\u8d8b\u52bf\u662f\u5411\u7740 Kotlin\uff0cKotlin \u672c\u8eab\u662f\u57fa\u4e8e JVM \u7684\uff0c\u548c Java \u5173\u8054\u6027\u8f83\u5927\u3002\u56e0\u6b64\u8fd8\u662f\u8981\u5148\u4e86\u89e3\u4e00\u4e0b Kotlin \u7684\u8bed\u6cd5\uff0c\u518d\u5165\u624b\u5b66\u4e60 Android \u5f00\u53d1\u3002\u6211\u89c9\u5f97\u5b66\u4e60 Android \u5f00\u53d1\uff0c\u5e94\u8be5\u5f53\u4f5c\u53e6\u5916\u4e00\u95e8\u8bed\u8a00\u6765\u5b66\u4e60\uff0c\u5e76\u4e0d\u662f\u7eaf\u7cb9\u7684 Java\/Kotlin&#8230; \u8bed\u8a00\u7684\u5f00\u53d1\uff0c\u7528\u7684\u662f Android \u7684\u5e93\uff0c\u5177\u4f53\u5f00\u53d1\u89c4\u5219\u4e5f\u662f\u770b Android \u7684\u89c4\u5b9a\uff0c\u53ea\u662f\u57fa\u672c\u8bed\u6cd5\u4e0a\u662f\u5177\u4f53\u8bed\u8a00\u7684\u3002\u6709\u70b9\u50cf Win32\uff0c\u7528 C\/C++ \u7684\u8bed\u6cd5\u6ca1\u95ee\u9898\uff0c\u4f46\u662f\u5165\u53e3\u51fd\u6570\u7684\u539f\u578b\u548c\u7eaf C\/C++ \u7684\u6807\u51c6\u89c4\u5b9a\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5177\u4f53\u5185\u5bb9\u5f00\u53d1\u4e0a\u662f\u4f9d\u8d56\u4e8e Windows \u7684\u89c4\u5b9a\u3002<br \/>\n\u4e2d\u95f4\u4e00\u6bb5\u65f6\u95f4\u53bb\u719f\u6089\u4e86\u4e00\u4e0b Kotlin \u57fa\u7840\u8bed\u6cd5\uff0c\u7528\u7684 IDEA\uff0c\u53d1\u73b0\u7528 IDEA \u4e5f\u53ef\u4ee5\u8fdb\u884c Android \u5f00\u53d1\uff08AS \u672c\u8eab\u5c31\u662f\u57fa\u4e8e IDEA \u5f00\u53d1\u7684\uff09\uff0c\u6240\u4ee5\u5c31\u76f4\u63a5\u6539\u7528 IDEA \u4e86\uff0c\u754c\u9762\u5e03\u5c40\u4e5f\u6ca1\u5565\u592a\u5927\u533a\u522b\u3002<br \/>\n\u5728\u51c6\u5907\u4e0a\u624b Android \u7684\u65f6\u5019\uff0c\u53c8\u53d1\u73b0\u4e86\u754c\u9762\u53ef\u4ee5\u4f7f\u7528\u4ee3\u7801\u7f16\u5199\uff0c\u76f8\u5f53\u4e8e\u524d\u7aef\u540e\u7aef\u90fd\u53ef\u4ee5\u7528 Kotlin \u5199\uff08\u4f7f\u7528 Jetpack Compose \u6846\u67b6\uff09\uff0c\u8fd9\u79cd\u5199\u6cd5\u611f\u89c9\u633a\u50cf Python \u7684 Tkinter\uff0c\u754c\u9762\u4e5f\u7528 Python \u5199\u3002\u4f20\u7edf\u7684\u5f00\u53d1\u662f\u7528 xml \u63cf\u8ff0\u754c\u9762\uff0c\u540e\u7aef\u7528 Java\/Kotlin\u3002\u6211\u662f\u76f8\u5f53\u4e8e\u4e1a\u4f59\u7231\u597d\u505a\u70b9\u4e1c\u897f\u73a9\uff0c\u4e5f\u5c31\u6ca1\u6709\u5fc5\u8981\u518d\u53bb\u5b66\u4f20\u7edf\u5f00\u53d1\u65b9\u5f0f\uff0c\u76f4\u63a5\u4e0a\u624b Jetpack Compose \u5f00\u53d1\u5c31\u884c\u3002<\/p>\n<p>Android \u5f00\u53d1\u5b66\u4e60\u53ef\u4ee5\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a<a href=\"https:\/\/developer.android.google.cn\/guide?hl=zh-cn\">https:\/\/developer.android.google.cn\/guide?hl=zh-cn<\/a><\/p>\n<h1><span class=\"ez-toc-section\" id=\"2_%E7%8E%AF%E5%A2%83\"><\/span>2 \u73af\u5883<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Android Studio 2022.3.1 Patch 3<br \/>\nIDEA 2023.1<\/p>\n<p>Compile SDK 33<br \/>\nCompose UI 1.2.0<br \/>\ncom.android.application 7.4.1<br \/>\ncom.android.library 7.4.1<br \/>\norg.jetbrains.kotlin.android 1.7.0<\/p>\n<p>\u6d4b\u8bd5\uff1aAndroid 13\uff08\u5b50\u7cfb\u7edf\u6216 MIUI14\uff09<\/p>\n<h1><span class=\"ez-toc-section\" id=\"3_%E8%B0%83%E8%AF%95\"><\/span>3 \u8c03\u8bd5<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>AS \u63d0\u4f9b\u6709\u5b89\u5353\u6a21\u62df\u5668\uff0c\u4f46\u662f\u6211\u8bd5\u4e86\u4e00\u4e0b\uff0c\u4f53\u9a8c\u5f88\u4e0d\u597d\uff0c\u592a\u5403\u8d44\u6e90\uff08\u53ef\u80fd\u6211\u7535\u8111\u914d\u7f6e\u4e0d\u884c\uff09\uff0c\u975e\u5e38\u5361\u987f\u3002\u6240\u4ee5\u91c7\u7528\u522b\u7684\u65b9\u6cd5\u8fd0\u884c\u8c03\u8bd5\u3002<\/p>\n<h2><span class=\"ez-toc-section\" id=\"31_%E5%AE%9E%E4%BD%93%E6%89%8B%E6%9C%BA\"><\/span>3.1 \u5b9e\u4f53\u624b\u673a<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u57fa\u4e8e \u7ea2\u7c73 note 13 Pro\uff08MIUI 14\uff0cAndroid 13\uff09\u9a8c\u8bc1<\/p>\n<p>\u7528\u81ea\u5df1\u7684\u624b\u673a\u8c03\u8bd5\uff0c\u53ef\u4ee5\u6709\u7ebf\u6216\u65e0\u7ebf\uff0c\u4e0d\u7ba1\u54ea\u79cd\u65b9\u5f0f\u90fd\u9700\u8981\u5f00\u542f<strong>\u5f00\u53d1\u8005\u9009\u9879<\/strong>\uff0c\u6709\u7ebf\u7684\u8bdd\u8fd8\u8981\u6253\u5f00 <strong>USB \u8c03\u8bd5\u6a21\u5f0f<\/strong>\uff0c\u53e6\u5916\u6211\u624b\u673a\u4e0a\u8fd8\u6709\u4e00\u9879 <strong>USB \u5b89\u88c5<\/strong>\uff0c\u8fd9\u4e2a\u4e5f\u8981\u52fe\u9009\uff0c\u4e0d\u7136\u8c03\u8bd5\u6ca1\u6cd5\u5b89\u88c5\u5e94\u7528\u5230\u624b\u673a\u3002<br \/>\n\uff08\u5f00\u53d1\u8005\u6a21\u5f0f\u9ed8\u8ba4\u90fd\u4f1a\u9690\u85cf\uff0c\u8fde\u7eed\u70b9\u51fb\u201c\u7cfb\u7edf\u7248\u672c\u201d\u5c31\u4f1a\u5728\u8bbe\u7f6e\u4e2d\u51fa\u73b0\u5f00\u53d1\u8005\u9009\u9879\uff09<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700310217475.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 284px; --smush-placeholder-aspect-ratio: 284\/577;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700300314410.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 293px; --smush-placeholder-aspect-ratio: 293\/425;\" \/><\/p>\n<p>\u65e0\u7ebf\u7684\u8bdd\uff0c\u624b\u673a\u901a\u8fc7 WiFi \u8fde\u63a5\uff0c\u4fdd\u8bc1\u7535\u8111\u5728\u540c\u4e00\u4e2a\u5c40\u57df\u7f51\u5185\uff08\u540c\u4e00\u4e2a\u8def\u7531\u5668\u4e0b\u9762\uff09\uff0c\u7136\u540e\u5728\u5f00\u53d1\u8005\u9009\u9879\u91cc\u6709\u4e2a<strong>\u65e0\u7ebf\u8c03\u8bd5<\/strong>\u8981\u6253\u5f00\uff0c\u53ef\u4ee5\u626b\u4e8c\u7ef4\u7801\u6216\u914d\u5bf9\u7801\u8fde\u63a5\u3002<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700300234464.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 451px; --smush-placeholder-aspect-ratio: 451\/200;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700300270260.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/680;\" \/><\/p>\n<p>\u8fd0\u884c AS \u63d0\u4f9b\u7684 demo<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700308682334.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 297px; --smush-placeholder-aspect-ratio: 297\/636;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700308721146.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 289px; --smush-placeholder-aspect-ratio: 289\/411;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"32_%E5%AD%90%E7%B3%BB%E7%BB%9F\"><\/span>3.2 \u5b50\u7cfb\u7edf<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6211\u7535\u8111\u4e0a\u5b89\u88c5\u4e86 WSA\uff08Android 13\uff09\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728\u7535\u8111\u4e0a\u5b89\u88c5\u5e94\u7528\u5305\uff0c\u76f4\u63a5\u8fd0\u884c\u5b89\u5353\u7a0b\u5e8f\u3002\u6ce8\u610f\u5728\u8bbe\u7f6e\u4e2d\u6253\u5f00\u5f00\u53d1\u8005\u9009\u9879\u4ee5\u53ca\u5176\u4e2d\u7684 USB \u8c03\u8bd5<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299300349.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 439px; --smush-placeholder-aspect-ratio: 439\/336;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299320275.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 433px; --smush-placeholder-aspect-ratio: 433\/203;\" \/><\/p>\n<p>\u5148\u914d\u7f6e\u4e00\u4e0b\u5e73\u53f0\u5de5\u5177\uff08platform-tools\uff09\u7684\u73af\u5883\u53d8\u91cf\uff0c\u5982\u679c\u5b89\u88c5\u7684\u65f6\u5019\u9009\u7684\u6807\u51c6\uff08standard\uff09\uff0c\u90a3\u4e48 SDK \u5b89\u88c5\u8def\u5f84\u5c31\u5728 C \u76d8\u3002\u914d\u7f6e\u597d\u73af\u5883\u53d8\u91cf\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528 adb \u7b49\u5de5\u5177<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299042953.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 656px; --smush-placeholder-aspect-ratio: 656\/689;\" \/><\/p>\n<p>\u5728 AS \u4e2d\uff0c\u70b9\u5f00\u7ec8\u7aef<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299155307.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 883px; --smush-placeholder-aspect-ratio: 883\/384;\" \/><\/p>\n<p>\u5728\u5b50\u7cfb\u7edf\u5df2\u7ecf\u8fd0\u884c\u7684\u60c5\u51b5\u4e0b\uff0c\u6267\u884c adb \u547d\u4ee4\u8fde\u63a5<\/p>\n<pre><code class=\"language-bash\">adb connect 127.0.0.1:58526<\/code><\/pre>\n<p>\u5b50\u7cfb\u7edf\u8fd9\u8fb9\u540c\u610f\u8fde\u63a5\u5c31\u884c<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299393584.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 1041px; --smush-placeholder-aspect-ratio: 1041\/341;\" \/><\/p>\n<p>\u5728\u8fd0\u884c\u8bbe\u5907\u91cc\u5c31\u80fd\u770b\u5230\u5b50\u7cfb\u7edf\u4e86<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700299495694.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 460px; --smush-placeholder-aspect-ratio: 460\/199;\" \/><\/p>\n<p>\u8fd0\u884c AS \u63d0\u4f9b\u7684 demo<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700308796404.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 423px; --smush-placeholder-aspect-ratio: 423\/331;\" \/><\/p>\n<h1><span class=\"ez-toc-section\" id=\"4_%E6%9D%82%E9%A1%B9%E8%AF%B4%E6%98%8E\"><\/span>4 \u6742\u9879\u8bf4\u660e<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2><span class=\"ez-toc-section\" id=\"41_%E9%95%BF%E5%BA%A6%E5%8D%95%E4%BD%8D\"><\/span>4.1 \u957f\u5ea6\u5355\u4f4d<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\n<p>dp\uff08Density-independent Pixels\uff09\uff1a\u72ec\u7acb\u50cf\u7d20\uff0c\u4e5f\u79f0\u4e3a\u8bbe\u5907\u72ec\u7acb\u50cf\u7d20\u3002dp\u662f\u4e00\u79cd\u4e0e\u5c4f\u5e55\u5bc6\u5ea6\u65e0\u5173\u7684\u5355\u4f4d\uff0c\u5b83\u53ef\u4ee5\u6839\u636e\u4e0d\u540c\u7684\u5c4f\u5e55\u5bc6\u5ea6\u81ea\u52a8\u8fdb\u884c\u9002\u914d\u3002\u5728\u5e03\u5c40\u6587\u4ef6\u4e2d\u5b9a\u4e49\u63a7\u4ef6\u7684\u5bbd\u3001\u9ad8\u7b49\u5c5e\u6027\u65f6\uff0c\u4e00\u822c\u4f1a\u4f7f\u7528dp\u4f5c\u4e3a\u5355\u4f4d\u3002\u5728160dpi\u7684\u5c4f\u5e55\u4e0a\uff0c1dp\u7b49\u4e8e1px\u3002<\/p>\n<\/li>\n<li>\n<p>mm\uff08Millimeters\uff09\uff1a\u6beb\u7c73\uff0c\u662f\u4e00\u79cd\u7269\u7406\u5c3a\u5bf8\u5355\u4f4d\u3002\u5728Android\u5f00\u53d1\u4e2d\uff0c\u4e0d\u5e38\u7528\u4e8e\u5e03\u5c40\uff0c\u4e3b\u8981\u7528\u4e8e\u4e00\u4e9b\u9700\u8981\u7cbe\u786e\u6d4b\u91cf\u7684\u573a\u666f\u3002<\/p>\n<\/li>\n<li>\n<p>pt\uff08Points\uff09\uff1a\u70b9\uff0c\u4e5f\u662f\u4e00\u79cd\u7269\u7406\u5c3a\u5bf8\u5355\u4f4d\u3002\u5728Android\u5f00\u53d1\u4e2d\uff0c\u540c\u6837\u4e0d\u5e38\u7528\u4e8e\u5e03\u5c40\uff0c\u4e3b\u8981\u7528\u4e8e\u4e00\u4e9b\u9700\u8981\u7cbe\u786e\u6d4b\u91cf\u7684\u573a\u666f\u30021pt\u7b49\u4e8e1\/72\u82f1\u5bf8\u3002<\/p>\n<\/li>\n<li>\n<p>px\uff08Pixels\uff09\uff1a\u50cf\u7d20\uff0c\u662f\u5c4f\u5e55\u4e0a\u7684\u6700\u5c0f\u663e\u793a\u5355\u5143\u3002\u5728Android\u5f00\u53d1\u4e2d\uff0cpx\u8868\u793a\u5b9e\u9645\u7684\u50cf\u7d20\u70b9\u3002\u4f46\u7531\u4e8e\u4e0d\u540c\u8bbe\u5907\u7684\u5c4f\u5e55\u5bc6\u5ea6\u4e0d\u540c\uff0c\u4f7f\u7528px\u4f5c\u4e3a\u5355\u4f4d\u53ef\u80fd\u5bfc\u81f4\u5728\u4e0d\u540c\u8bbe\u5907\u4e0a\u663e\u793a\u6548\u679c\u4e0d\u4e00\u81f4\uff0c\u56e0\u6b64\u4e0d\u63a8\u8350\u5728\u5e03\u5c40\u4e2d\u76f4\u63a5\u4f7f\u7528px\u4f5c\u4e3a\u5355\u4f4d\u3002<\/p>\n<\/li>\n<li>\n<p>sp\uff08Scaled Pixels\uff09\uff1a\u6bd4\u4f8b\u50cf\u7d20\uff0c\u4e5f\u79f0\u4e3a\u53ef\u7f29\u653e\u50cf\u7d20\u3002sp\u662f\u4e00\u79cd\u4e0e\u7f29\u653e\u65e0\u5173\u7684\u50cf\u7d20\u5355\u4f4d\uff0c\u901a\u5e38\u7528\u4e8e\u5b9a\u4e49\u5b57\u4f53\u5927\u5c0f\u3002\u4e0edp\u7c7b\u4f3c\uff0csp\u4e5f\u53ef\u4ee5\u6839\u636e\u5c4f\u5e55\u5bc6\u5ea6\u8fdb\u884c\u9002\u914d\uff0c\u5e76\u4e14\u8fd8\u53ef\u4ee5\u968f\u7740\u7cfb\u7edf\u5b57\u4f53\u5927\u5c0f\u7684\u8bbe\u7f6e\u8fdb\u884c\u7f29\u653e\u3002\u5982\u679c\u5e0c\u671b\u6587\u5b57\u5927\u5c0f\u968f\u7740\u7cfb\u7edf\u5b57\u4f53\u8bbe\u7f6e\u7684\u6539\u53d8\u800c\u53d8\u5316\uff0c\u53ef\u4ee5\u4f7f\u7528sp\u4f5c\u4e3a\u5355\u4f4d\u3002<\/p>\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"42_%E5%BF%AB%E6%8D%B7%E9%94%AE\"><\/span>4.2 \u5feb\u6377\u952e<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u5728\u8bbe\u7f6e\u91cc\u6709\u4e00\u9879 keymap \u5c31\u662f\u8bbe\u7f6e\u5feb\u6377\u952e\u7684\uff0c\u91cc\u9762\u4e5f\u63d0\u4f9b\u4e86\u51e0\u79cd\u5e38\u7528\u7684\u5feb\u6377\u952e\u65b9\u6848\uff0c\u6216\u8005\u624b\u52a8\u8bbe\u7f6e\u5177\u4f53\u9879\u76ee\u3002<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700652176454.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 982px; --smush-placeholder-aspect-ratio: 982\/587;\" \/><\/p>\n<p>\u6211\u4e4b\u524d\u641e Python\u3001C \u8bed\u8a00\u3001C++\u3001Java \u7b49\u7b49\u90fd\u662f\u4f7f\u7528 VScode\uff0c\u5df2\u7ecf\u5b8c\u5168\u4e60\u60ef\u4e86 VScode \u7684\u5feb\u6377\u952e\u65b9\u6848\uff0c\u8fd9\u91cc\u53ef\u4ee5\u901a\u8fc7 Jetbrains \u7684\u63d2\u4ef6\u6765\u652f\u6301\u3002<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700652391180.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 989px; --smush-placeholder-aspect-ratio: 989\/463;\" \/><\/p>\n<p>\u5b89\u88c5\u63d2\u4ef6\u540e\uff0c\u5728 keymap \u5904\u5c31\u80fd\u9009 VScode \u65b9\u6848\u7684\u5feb\u6377\u952e\u4e86<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1700652509086.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 500px; --smush-placeholder-aspect-ratio: 500\/487;\" \/><\/p>\n<h1><span class=\"ez-toc-section\" id=\"5_%E6%8E%A2%E7%B4%A2\"><\/span>5 \u63a2\u7d22<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701108229918.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 905px; --smush-placeholder-aspect-ratio: 905\/637;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"51_hello_world\"><\/span>5.1 hello world<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre><code class=\"language-kotlin\">package com.iyatt.greetingcard\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport com.iyatt.greetingcard.ui.theme.GreetingCardTheme\n\n@Composable \/\/ \u6807\u8bb0\u8fd9\u662f\u4e00\u4e2a\u53ef\u7ec4\u5408\u51fd\u6570\uff08\u7528\u4e8e\u6784\u5efa UI \u7684\u7ec4\u4ef6\uff09\nfun Greeting(name: String)\n{\n    Text(\n        text = &quot;\u4f60\u597d $name\uff01&quot;,\n        modifier = Modifier.padding(20.dp) \/\/ \u5185\u8fb9\u8ddd\n    )\n}\n\n@Preview(showBackground = true) \/\/ \u652f\u6301\u9884\u89c8\n@Composable\nfun DefaultPreview()\n{\n    GreetingCardTheme {\n        Greeting(&quot;\u5c0f\u7ea2&quot;)\n    }\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            GreetingCardTheme { \/\/ GreetingCard \u662f\u9879\u76ee\u540d\uff0cxxxxxTheme \u8ddf\u968f\u9879\u76ee\u540d\uff08\u81ea\u52a8\u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u4e3b\u9898\uff09\n                Surface( \/\/ \u7ec4\u4ef6\n                    \/\/ modifier = Modifier.fillMaxSize(), \/\/ \u7ec4\u4ef6\u5927\u5c0f\u8bbe\u7f6e\u4e3a\u6700\u5927\n                    \/\/ color = MaterialTheme.colors.background \/\/ \u5c06\u80cc\u666f\u989c\u8272\u4f5c\u4e3a\u7ec4\u4ef6\u7684\u989c\u8272\n                    color = Color.Blue \/\/ \u7ec4\u4ef6\u989c\u8272\u8bbe\u7f6e\u4e3a\u84dd\u8272\n                )\n                {\n                    Greeting(&quot;\u5c0f\u660e&quot;)\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p>Android \u5b50\u7cfb\u7edf\u8c03\u8bd5\u8fd0\u884c\u6548\u679c<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701107171756.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 431px; --smush-placeholder-aspect-ratio: 431\/195;\" \/><\/p>\n<p>\u9884\u89c8<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701107209748.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 976px; --smush-placeholder-aspect-ratio: 976\/609;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"52_%E5%88%97%E5%B8%83%E5%B1%80\"><\/span>5.2 \u5217\u5e03\u5c40<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre><code class=\"language-kotlin\">package com.iyatt.happybirthday\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.MaterialTheme\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.sp\nimport androidx.compose.ui.unit.dp\nimport com.iyatt.happybirthday.ui.theme.HappyBirthdayTheme\n\n@Composable\nfun GreetingText(msg: String, from: String, modifier: Modifier = Modifier)\n{\n    Column( \/\/ \u5217\u5e03\u5c40\uff08\u5782\u76f4\uff09\n        verticalArrangement = Arrangement.Center, \/\/ \u5782\u76f4\u65b9\u5411\u5c45\u4e2d\u5bf9\u9f50\n        modifier = modifier \/\/ \u4fee\u9970\u7b26\uff0c\u8bbe\u7f6e\u5927\u5c0f\u3001\u8fb9\u8ddd\u3001\u989c\u8272\u7b49\n    )\n    {\n        Text(\n            text = msg, \/\/ \u8981\u663e\u793a\u7684\u6587\u672c\u5185\u5bb9\n            fontSize = 100.sp, \/\/ \u5b57\u4f53\u5927\u5c0f\n            lineHeight = 116.sp, \/\/ \u884c\u9ad8\n            textAlign = TextAlign.Center \/\/ \u6587\u672c\u5c45\u4e2d\u5bf9\u9f50\n        )\n        Text(\n            text = from,\n            fontSize = 36.sp,\n            modifier = Modifier\n                .padding(16.dp) \/\/ \u5185\u8fb9\u8ddd\n                .align(alignment = Alignment.End) \/\/ \u5728\u5176\u7236\u5bb9\u5668\u7684\u672b\u5c3e\u5bf9\u9f50\n        )\n    }\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            HappyBirthdayTheme {\n                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)\n                {\n                    GreetingText(&quot;\u5c0f\u660e\uff0c\u751f\u65e5\u5feb\u4e50\uff01&quot;, &quot;\u6765\u81ea\u5c0f\u7ea2&quot;)\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701109528333.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 507px; --smush-placeholder-aspect-ratio: 507\/634;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"53_%E6%B7%BB%E5%8A%A0%E5%9B%BE%E7%89%87\"><\/span>5.3 \u6dfb\u52a0\u56fe\u7247<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u4f7f\u7528\u7684\u56fe\u7247\uff1a<a href=\"https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-birthday-card-app\/blob\/main\/app\/src\/main\/res\/drawable-nodpi\/androidparty.png\">https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-birthday-card-app\/blob\/main\/app\/src\/main\/res\/drawable-nodpi\/androidparty.png<\/a><\/p>\n<p>\u4e0b\u8f7d\u540e\u53ef\u4ee5\u62d6\u52a8\u5230\u8d44\u6e90\u6846\u8fdb\u884c\u5bfc\u5165<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701111503633.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 503px; --smush-placeholder-aspect-ratio: 503\/436;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701111524662.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 987px; --smush-placeholder-aspect-ratio: 987\/706;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701111543353.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 525px; --smush-placeholder-aspect-ratio: 525\/713;\" \/><\/p>\n<p>\u5728\u5f00\u53d1\u4e2d\u4e00\u822c\u4f1a\u628a\u8d44\u6e90\u548c\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801\u5206\u79bb\uff0c\u6bd4\u5982\u56fe\u7247\u3001\u5b57\u7b26\u4e32\u3001\u989c\u8272\u5b9a\u4e49\u7b49\u7b49\u3002<br \/>\n\u8fd9\u4e2a\u6848\u4f8b\u5728\u4e0a\u4e00\u4e2a\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86\u56fe\u7247\uff0c\u53e6\u5916\u5c06\u5b57\u7b26\u4e32\u5206\u79bb\u5355\u72ec\u4fdd\u5b58\u3002<br \/>\njava \u662f\u6e90\u7801\u76ee\u5f55\uff0cres \u5c31\u662f\u8d44\u6e90\u76ee\u5f55\uff0cdrawable \u4e0b\u9762\u653e\u7f6e\u7684\u662f\u56fe\u7247<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701112352627.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 360px; --smush-placeholder-aspect-ratio: 360\/603;\" \/><\/p>\n<p>values \u4e0b\u9762\u9ed8\u8ba4\u6709\u989c\u8272\u3001\u5b57\u7b26\u4e32\u3001\u4e3b\u9898<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701112413715.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 199px; --smush-placeholder-aspect-ratio: 199\/95;\" \/><\/p>\n<p>\u8fd9\u4e2a\u6848\u4f8b\u4e2d\u5355\u72ec\u5b9a\u4e49\u7684\u5b57\u7b26\u4e32<br \/>\nstrings.xml<\/p>\n<pre><code class=\"language-xml\">&lt;resources&gt;\n    &lt;string name=&quot;app_name&quot;&gt;happyBirthday&lt;\/string&gt;\n    &lt;string name=&quot;happy_birthday_text&quot;&gt;\u5c0f\u660e\uff0c\u751f\u65e5\u5feb\u4e50\uff01&lt;\/string&gt;\n    &lt;string name=&quot;signature_text&quot;&gt;\u6765\u81ea\u5c0f\u7ea2&lt;\/string&gt;\n&lt;\/resources&gt;<\/code><\/pre>\n<p>\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801<\/p>\n<pre><code class=\"language-kotlin\">package com.iyatt.happybirthday\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.material.MaterialTheme\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.sp\nimport androidx.compose.ui.unit.dp\nimport com.iyatt.happybirthday.ui.theme.HappyBirthdayTheme\n\n@Composable\nfun GreetingText(msg: String, from: String, modifier: Modifier = Modifier)\n{\n    Column( \/\/ \u5217\u5e03\u5c40\uff08\u5782\u76f4\uff09\n        verticalArrangement = Arrangement.Center, \/\/ \u5782\u76f4\u65b9\u5411\u5c45\u4e2d\u5bf9\u9f50\n        modifier = modifier \/\/ \u4fee\u9970\u7b26\uff0c\u8bbe\u7f6e\u5927\u5c0f\u3001\u8fb9\u8ddd\u3001\u989c\u8272\u7b49\n    )\n    {\n        Text(\n            text = msg, \/\/ \u8981\u663e\u793a\u7684\u6587\u672c\u5185\u5bb9\n            fontSize = 100.sp, \/\/ \u5b57\u4f53\u5927\u5c0f\n            lineHeight = 116.sp, \/\/ \u884c\u9ad8\n            textAlign = TextAlign.Center \/\/ \u6587\u672c\u5c45\u4e2d\u5bf9\u9f50\n        )\n        Text(\n            text = from,\n            fontSize = 36.sp,\n            modifier = Modifier\n                .padding(16.dp) \/\/ \u5185\u8fb9\u8ddd\n                .align(alignment = Alignment.End) \/\/ \u5728\u5176\u7236\u5bb9\u5668\u7684\u672b\u5c3e\u5bf9\u9f50\n        )\n    }\n}\n\n@Composable\nfun GreetingImage(msg: String, from: String, modifier: Modifier = Modifier)\n{\n    Box(modifier)\n    {\n        Image(\n            painter = painterResource(id = R.drawable.androidparty), \/\/ \u6307\u5b9a\u56fe\u50cf\u8d44\u6e90\n            contentDescription = null, \/\/ \u56fe\u50cf\u63cf\u8ff0\uff08\u53ef\u4ee5\u7528\u4e8e\u652f\u6301\u5c4f\u5e55\u9605\u8bfb\uff0c\u5bf9\u65e0\u969c\u788d\u529f\u80fd\u7684\u652f\u6301\uff09\n            contentScale = ContentScale.Crop, \/\/ \u56fe\u50cf\u7f29\u653e\u65b9\u5f0f\uff1a\u526a\u88c1\n            alpha = 0.5F \/\/ \u56fe\u50cf\u900f\u660e\u5ea6\n        )\n        GreetingText( \/\/ \u8c03\u7528\u81ea\u5b9a\u4e49\u7684\u6587\u672c\u663e\u793a\n            msg = msg,\n            from = from,\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(8.dp)\n        )\n    }\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            HappyBirthdayTheme {\n                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)\n                {\n                    GreetingImage(\n                        stringResource(R.string.happy_birthday_text), \/\/ \u4f20\u5165 strings.xml \u4fdd\u5b58\u7684\u5b57\u7b26\u4e32\n                        stringResource(R.string.signature_text)\n                    )\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701112756515.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 489px; --smush-placeholder-aspect-ratio: 489\/925;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"54_%E5%B8%83%E5%B1%80_%E2%80%93_%E6%96%87%E7%AB%A0\"><\/span>5.4 \u5e03\u5c40 &#8211; \u6587\u7ae0<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u4f7f\u7528\u5230\u7684\u56fe\u7247\u8d44\u6e90\uff1a<a href=\"https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-training-practice-problems\/blob\/main\/Unit%201\/Pathway%203\/ComposeArticle\/app\/src\/main\/res\/drawable-nodpi\/bg_compose_background.png\">https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-training-practice-problems\/blob\/main\/Unit%201\/Pathway%203\/ComposeArticle\/app\/src\/main\/res\/drawable-nodpi\/bg_compose_background.png<\/a><\/p>\n<p>strings.xml<\/p>\n<pre><code class=\"language-xml\">&lt;resources&gt;\n    &lt;string name=&quot;app_name&quot;&gt;\u6587\u7ae0&lt;\/string&gt;\n\n    &lt;string name=&quot;title_jetpack_compose_tutorial&quot;&gt;Jetpack Compose \u6559\u7a0b&lt;\/string&gt;\n    &lt;string name=&quot;compose_short_desc&quot;&gt;Jetpack Compose\u662f\u4e00\u4e2a\u7528\u4e8e\u6784\u5efa\u539f\u751fAndroid UI\u7684\u73b0\u4ee3\u5de5\u5177\u5305\u3002Compose\u4f7f\u7528\u66f4\u5c11\u7684\u4ee3\u7801\u3001\u5f3a\u5927\u7684\u5de5\u5177\u548c\u76f4\u89c2\u7684Kotlin API\u7b80\u5316\u5e76\u52a0\u901f\u4e86Android\u4e0a\u7684UI\u5f00\u53d1\u3002&lt;\/string&gt;\n    &lt;string name=&quot;compose_long_desc&quot;&gt;\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u60a8\u5c06\u6784\u5efa\u4e00\u4e2a\u5177\u6709\u58f0\u660e\u6027\u51fd\u6570\u7684\u7b80\u5355UI\u7ec4\u4ef6\u3002\u4f60\u8c03\u7528Compose\u51fd\u6570\u6765\u8bf4\u660e\u4f60\u60f3\u8981\u4ec0\u4e48\u5143\u7d20\uff0c\u5269\u4e0b\u7684\u7531Compose\u7f16\u8bd1\u5668\u5b8c\u6210\u3002Compose\u662f\u56f4\u7ed5\u53ef\u7ec4\u5408\u51fd\u6570\u6784\u5efa\u7684\u3002\u8fd9\u4e9b\u51fd\u6570\u5141\u8bb8\u60a8\u4ee5\u7f16\u7a0b\u65b9\u5f0f\u5b9a\u4e49\u5e94\u7528\u7a0b\u5e8f\u7684UI\uff0c\u56e0\u4e3a\u5b83\u4eec\u5141\u8bb8\u60a8\u63cf\u8ff0\u5b83\u7684\u5916\u89c2\u5e76\u63d0\u4f9b\u6570\u636e\u4f9d\u8d56\u5173\u7cfb\uff0c\u800c\u4e0d\u662f\u4e13\u6ce8\u4e8eUI\u7684\u6784\u5efa\u8fc7\u7a0b\uff0c\u4f8b\u5982\u521d\u59cb\u5316\u5143\u7d20\uff0c\u7136\u540e\u5c06\u5176\u9644\u52a0\u5230\u7236\u7ea7\u3002\u82e5\u8981\u521b\u5efa\u53ef\u7ec4\u5408\u51fd\u6570\uff0c\u8bf7\u5728\u51fd\u6570\u540d\u79f0\u4e2d\u6dfb\u52a0@Composable\u6ce8\u91ca\u3002&lt;\/string&gt;\n&lt;\/resources&gt;<\/code><\/pre>\n<p>\u4ee3\u7801<\/p>\n<pre><code class=\"language-kotlin\">package com.iyatt.article\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.MaterialTheme\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.painter.Painter\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport com.iyatt.article.ui.theme.\u6587\u7ae0Theme\n\n@Composable\nprivate fun ArticleCard(\n    title: String, shortDescription: String, longDescription: String,\n    imagePainter: Painter, modifier: Modifier = Modifier\n)\n{\n    Column(modifier = modifier)\n    {\n        Image(painter = imagePainter, contentDescription = null)\n        Text(text = title, modifier = Modifier.padding(16.dp), fontSize = 24.sp)\n        Text(\n            text = shortDescription, modifier = Modifier.padding(start = 16.dp, end = 16.dp),\n            textAlign = TextAlign.Justify\n        ) \/\/ \u4e24\u7aef\u5bf9\u9f50\n        Text(text = longDescription, modifier = Modifier.padding(16.dp), textAlign = TextAlign.Justify)\n    }\n}\n\n@Composable\nfun ArticleApp()\n{\n    ArticleCard(\n        title = stringResource(R.string.title_jetpack_compose_tutorial),\n        shortDescription = stringResource(R.string.compose_short_desc),\n        longDescription = stringResource(R.string.compose_long_desc),\n        imagePainter = painterResource(R.drawable.bg_compose_background)\n    )\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            \u6587\u7ae0Theme {\n                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)\n                {\n                    ArticleApp()\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701157805488.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 408px; --smush-placeholder-aspect-ratio: 408\/516;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"55_%E5%B8%83%E5%B1%80_%E2%80%93_%E4%BB%BB%E5%8A%A1%E5%AE%8C%E6%88%90%E9%A1%B5%E9%9D%A2\"><\/span>5.5 \u5e03\u5c40 &#8211; \u4efb\u52a1\u5b8c\u6210\u9875\u9762<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u4f7f\u7528\u5230\u7684\u56fe\u7247\u8d44\u6e90\uff1a<a href=\"https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-training-practice-problems\/blob\/main\/Unit%201\/Pathway%203\/TaskCompleted\/app\/src\/main\/res\/drawable\/ic_task_completed.png\">https:\/\/github.com\/google-developer-training\/basic-android-kotlin-compose-training-practice-problems\/blob\/main\/Unit%201\/Pathway%203\/TaskCompleted\/app\/src\/main\/res\/drawable\/ic_task_completed.png<\/a><\/p>\n<p>strings.xml<\/p>\n<pre><code class=\"language-xml\">&lt;resources&gt;\n    &lt;string name=&quot;app_name&quot;&gt;\u4efb\u52a1\u5b8c\u6210\u9875\u9762&lt;\/string&gt;\n\n    &lt;string name=&quot;all_task_completed&quot;&gt;\u6240\u6709\u4efb\u52a1\u5df2\u5b8c\u6210&lt;\/string&gt;\n    &lt;string name=&quot;nice_work&quot;&gt;\u5e72\u5f97\u4e0d\u9519\uff01&lt;\/string&gt;\n&lt;\/resources&gt;<\/code><\/pre>\n<p>\u4ee3\u7801<\/p>\n<pre><code class=\"language-kotlin\">package com.iyatt.tc\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.material.MaterialTheme\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport com.iyatt.tc.ui.theme.\u4efb\u52a1\u5b8c\u6210\u9875\u9762Theme\n\n@Composable\nfun TaskCompletedScreen()\n{\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .fillMaxHeight(),\n        verticalArrangement = Arrangement.Center,\n        horizontalAlignment = Alignment.CenterHorizontally\n    )\n    {\n        Image(painter = painterResource(R.drawable.ic_task_completed), contentDescription = null)\n        Text(\n            text = stringResource(R.string.all_task_completed),\n            modifier = Modifier.padding(top = 24.dp, bottom = 8.dp),\n            fontWeight = FontWeight.Bold \/\/ \u7c97\u4f53\n        )\n        Text(\n            text = stringResource(R.string.nice_work),\n            fontSize = 16.sp\n        )\n    }\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            \u4efb\u52a1\u5b8c\u6210\u9875\u9762Theme {\n                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)\n                {\n                    TaskCompletedScreen()\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701159515240.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 355px; --smush-placeholder-aspect-ratio: 355\/548;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"56_%E5%B8%83%E5%B1%80_%E2%80%93_%E8%B1%A1%E9%99%90\"><\/span>5.6 \u5e03\u5c40 &#8211; \u8c61\u9650<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>strings.xml<\/p>\n<pre><code class=\"language-xml\">&lt;resources&gt;\n    &lt;string name=&quot;app_name&quot;&gt;\u8c61\u9650&lt;\/string&gt;\n\n    &lt;string name=&quot;first_title&quot;&gt;\u6587\u672c&lt;\/string&gt;\n    &lt;string name=&quot;first_description&quot;&gt;\u663e\u793a\u6587\u672c\u5e76\u9075\u5faa\u63a8\u8350\u7684 Material Design \u51c6\u5219\u3002&lt;\/string&gt;\n    &lt;string name=&quot;second_title&quot;&gt;\u56fe\u7247&lt;\/string&gt;\n    &lt;string name=&quot;second_description&quot;&gt;\u521b\u5efa\u4e00\u4e2a\u53ef\u7ec4\u5408\u7684\u5e03\u5c40\u548c\u7ed8\u5236\u7ed9\u5b9a\u7684 Painter \u5bf9\u8c61\u3002&lt;\/string&gt;\n    &lt;string name=&quot;third_title&quot;&gt;\u884c&lt;\/string&gt;\n    &lt;string name=&quot;third_description&quot;&gt;\u5b50\u9879\u6309\u6c34\u5e73\u65b9\u5411\u653e\u7f6e\u7684\u53ef\u7ec4\u5408\u5e03\u5c40\u3002&lt;\/string&gt;\n    &lt;string name=&quot;fourth_title&quot;&gt;\u5217&lt;\/string&gt;\n    &lt;string name=&quot;fourth_description&quot;&gt;\u5b50\u9879\u6309\u5782\u76f4\u65b9\u5411\u653e\u7f6e\u7684\u53ef\u7ec4\u5408\u5e03\u5c40\u3002&lt;\/string&gt;\n&lt;\/resources&gt;<\/code><\/pre>\n<p>\u4ee3\u7801<\/p>\n<pre><code class=\"language-kotlin\">package com.iyatt.quadrant\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.material.MaterialTheme\nimport androidx.compose.material.Surface\nimport androidx.compose.material.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport com.iyatt.quadrant.ui.theme.\u8c61\u9650Theme\n\n@Composable\nprivate fun ComposableInfoCard(\n    title: String,\n    description: String,\n    backgroundColor: Color,\n    modifier: Modifier = Modifier\n)\n{\n    Column(\n        modifier = modifier\n            .fillMaxSize()\n            .background(backgroundColor)\n            .padding(16.dp),\n        verticalArrangement = Arrangement.Center,\n        horizontalAlignment = Alignment.CenterHorizontally\n    )\n    {\n        Text(text = title, modifier = Modifier.padding(bottom = 16.dp))\n        Text(text = description, textAlign = TextAlign.Justify)\n    }\n}\n\n@Composable\nfun QuadrantApp()\n{\n    Column(Modifier.fillMaxSize())\n    {\n        Row(Modifier.weight(1F))\n        {\n            ComposableInfoCard(\n                title = stringResource(R.string.first_title),\n                description = stringResource(R.string.first_description),\n                backgroundColor = Color(0xFFEADDFF),\n                modifier = Modifier.weight(1F)\n            )\n            ComposableInfoCard(\n                title = stringResource(R.string.second_title),\n                description = stringResource(R.string.second_description),\n                backgroundColor = Color(0xFFD0BCFF),\n                modifier = Modifier.weight(1F)\n            )\n        }\n        Row(Modifier.weight(1F))\n        {\n            ComposableInfoCard(\n                title = stringResource(R.string.third_title),\n                description = stringResource(R.string.third_description),\n                backgroundColor = Color(0xFFB69DF8),\n                modifier = Modifier.weight(1F)\n            )\n            ComposableInfoCard(\n                title = stringResource(R.string.fourth_title),\n                description = stringResource(R.string.fourth_description),\n                backgroundColor = Color(0xFFF6EDFF),\n                modifier = Modifier.weight(1F)\n            )\n        }\n    }\n}\n\nclass MainActivity : ComponentActivity()\n{\n    override fun onCreate(savedInstanceState: Bundle?)\n    {\n        super.onCreate(savedInstanceState)\n        setContent {\n            \u8c61\u9650Theme {\n                \/\/ A surface container using the &#039;background&#039; color from the theme\n                Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)\n                {\n                    QuadrantApp()\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1701163685588.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 443px; --smush-placeholder-aspect-ratio: 443\/652;\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1 \u524d\u8a00 \u524d\u9762 9 \u6708\u4efd\u56e0\u4e3a\u63a5\u5355\u7684\u539f\u56e0\uff0c\u73b0\u5b66\u4e86 Java\uff0c\u57fa\u7840\u4e0a\u5e94\u8be5\u6ca1\u5565\u5927\u95ee\u9898\u4e86\u3002\u524d\u51e0\u5929\u53c8\u6298\u817e\u4e86\u4e0b ESP32 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[1,591],"tags":[],"class_list":["post-11977","post","type-post","status-publish","format-standard","hentry","category-all","category-android"],"modified_by":"IYATT-yx","_links":{"self":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/11977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11977"}],"version-history":[{"count":0,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/11977\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}