{"id":422,"date":"2026-09-18T15:46:24","date_gmt":"2026-09-18T07:46:24","guid":{"rendered":"https:\/\/www.kirasu.cn\/index.php\/2026\/09\/18\/kotlin%ef%bc%88%e9%80%82%e9%85%8d%e7%89%88%ef%bc%89\/"},"modified":"2026-09-18T15:46:24","modified_gmt":"2026-09-18T07:46:24","slug":"kotlin%ef%bc%88%e9%80%82%e9%85%8d%e7%89%88%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.kirasu.cn\/index.php\/2026\/09\/18\/kotlin%ef%bc%88%e9%80%82%e9%85%8d%e7%89%88%ef%bc%89\/","title":{"rendered":"Kotlin"},"content":{"rendered":"<h1>Kotlin \u57fa\u7840\u5b8c\u6574\u5b66\u4e60\u7b14\u8bb0 + \u53ef\u8fd0\u884c\u6848\u4f8b<\/h1>\n<p>\u5efa\u8bae\uff1a\u65b0\u5efa Kotlin\/JVM Library \u6a21\u5757\u8fd0\u884c\u4e0b\u9762\u6240\u6709\u4ee3\u7801\uff0c\u4e0d\u8981\u653e\u5728 Android app \u6a21\u5757\uff0c\u907f\u514dSourceSet\u62a5\u9519\u3002<\/p>\n<h2>1. \u53d8\u91cf\u58f0\u660e val \/var<\/h2>\n<ul>\n<li>val\uff1a<strong>\u53ea\u8bfb\uff08final\uff09<\/strong>\uff0c\u8d4b\u503c\u540e\u4e0d\u80fd\u4fee\u6539\uff0c\u4f18\u5148\u4f7f\u7528 val<\/li>\n<li>var\uff1a<strong>\u53ef\u53d8<\/strong>\uff0c\u53ef\u4ee5\u91cd\u65b0\u8d4b\u503c<\/li>\n<li>\n<p>Kotlin <strong>\u7c7b\u578b\u81ea\u52a8\u63a8\u5bfc<\/strong>\uff0c\u5f88\u591a\u65f6\u5019\u4e0d\u7528\u5199:\u7c7b\u578b<\/p>\n<pre><code>fun main() {\n\/\/ val \u53ea\u8bfb\uff0c\u4e0d\u53ef\u4fee\u6539\nval name: String = \"\u5f20\u4e09\"\n\/\/ name = \"\u674e\u56db\" \/\/\u7f16\u8bd1\u62a5\u9519\uff01val\u4e0d\u80fd\u4e8c\u6b21\u8d4b\u503c\n\n\/\/ var \u53ef\u53d8\u53d8\u91cf\nvar age: Int = 18\nage = 22\n\n\/\/ \u7c7b\u578b\u81ea\u52a8\u63a8\u5bfc\uff0c\u7f16\u8bd1\u5668\u81ea\u52a8\u8bc6\u522b\u7c7b\u578b\uff0c\u53ef\u4ee5\u7701\u7565\u7c7b\u578b\nval height = 175.3 \/\/ Double\nval isStudent = true \/\/ Boolean\n\nprintln(name)\nprintln(age)\nprintln(height)\n}<\/code><\/pre>\n<h2>2. \u57fa\u7840\u6570\u636e\u7c7b\u578b<\/h2>\n<p>\u8868\u683c<\/p>\n<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u7c7b\u578b<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u793a\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Int<\/td>\n<td>\u6574\u6570<\/td>\n<td>val a:Int = 10<\/td>\n<\/tr>\n<tr>\n<td>Double<\/td>\n<td>\u5c0f\u6570\u53cc\u7cbe\u5ea6<\/td>\n<td>val d = 3.14<\/td>\n<\/tr>\n<tr>\n<td>Float<\/td>\n<td>\u5355\u7cbe\u5ea6\u5c0f\u6570<\/td>\n<td>val f = 3.14f<\/td>\n<\/tr>\n<tr>\n<td>Long<\/td>\n<td>\u957f\u6574\u578b<\/td>\n<td>val l = 1000L<\/td>\n<\/tr>\n<tr>\n<td>Boolean<\/td>\n<td>\u5e03\u5c14<\/td>\n<td>val b = true \/ false<\/td>\n<\/tr>\n<tr>\n<td>Char<\/td>\n<td>\u5355\u4e2a\u5b57\u7b26<\/td>\n<td>val c = &#8216;A&#8217;<\/td>\n<\/tr>\n<tr>\n<td>String<\/td>\n<td>\u5b57\u7b26\u4e32<\/td>\n<td>val str = &#8220;hello&#8221;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Kotlin \u6ca1\u6709\u57fa\u7840\u539f\u59cb\u7c7b\u578b\uff0c\u5168\u90e8\u90fd\u662f\u5bf9\u8c61\u3002<\/p>\n<h2>3. \u5b57\u7b26\u4e32\u6a21\u677f $<\/h2>\n<p>$\u53d8\u91cf\u540d \u76f4\u63a5\u5d4c\u5165\u5b57\u7b26\u4e32\uff1b\u590d\u6742\u8868\u8fbe\u5f0f ${\u8868\u8fbe\u5f0f}<\/p>\n<pre><code>fun main() {\n    val name = \"\u5c0f\u660e\"\n    val age = 20\n    \/\/ \u7b80\u5355\u53d8\u91cf $\n    val info1 = \"\u59d3\u540d\uff1a$name\uff0c\u5e74\u9f84\uff1a$age\"\n    \/\/ \u8868\u8fbe\u5f0f ${ }\n    val info2 = \"\u660e\u5e74\u5e74\u9f84\uff1a${age + 1}\"\n\n    println(info1) \/\/\u59d3\u540d\uff1a\u5c0f\u660e\uff0c\u5e74\u9f84\uff1a20\n    println(info2) \/\/\u660e\u5e74\u5e74\u9f84\uff1a21\n\n    \/\/ \u591a\u884c\u5b57\u7b26\u4e32 \"\"\"\n    val multiStr = \"\"\"\n        \u7b2c\u4e00\u884c\u6587\u672c\n        \u7b2c\u4e8c\u884c\u6587\u672c\n        \u59d3\u540d=$name\n    \"\"\".trimIndent()\n    println(multiStr)\n}<\/code><\/pre>\n<h2>4. \u53ef\u7a7a\u7c7b\u578b ? \u3001\u5b89\u5168\u8c03\u7528 ?. \u3001Elvis \u8fd0\u7b97\u7b26 ?:<\/h2>\n<p>Kotlin \u9ed8\u8ba4\u53d8\u91cf\u4e0d\u80fd\u4e3a null\uff0c\u60f3\u8981\u5b58 null \u5fc5\u987b\u52a0?\u58f0\u660e\u53ef\u7a7a\u7c7b\u578b<\/p>\n<ul>\n<li>\u53d8\u91cf?\uff1a\u6807\u8bb0\u8fd9\u4e2a\u53d8\u91cf\u5141\u8bb8\u4e3a null<\/li>\n<li>?.\uff1a\u5b89\u5168\u8c03\u7528\uff0c\u53d8\u91cf\u4e3a null \u7684\u65f6\u5019\uff0c\u76f4\u63a5\u8fd4\u56de null\uff0c\u4e0d\u4f1a\u7a7a\u6307\u9488\u5d29\u6e83<\/li>\n<li>?: Elvis\uff0c\u5982\u679c\u5de6\u8fb9\u7ed3\u679c\u662f null\uff0c\u8fd4\u56de\u53f3\u8fb9\u9ed8\u8ba4\u503c<\/li>\n<li>\n<p>!!\uff1a\u5f3a\u5236\u975e\u7a7a\uff0c\u544a\u8bc9\u7f16\u8bd1\u5668\u4e00\u5b9a\u4e0d\u4e3a null\uff0c\u4e3a null \u4f1a\u76f4\u63a5\u5d29\u6e83\uff0c\u5f00\u53d1\u5c3d\u91cf\u5c11\u7528<\/p>\n<pre><code>fun main() {\n\/\/ \u666e\u901aString\uff0c\u4e0d\u80fd\u8d4b\u503cnull\n\/\/ var str:String = null \/\/\u7f16\u8bd1\u62a5\u9519\n\n\/\/ ? \u53ef\u7a7a\u7c7b\u578b\uff0c\u53ef\u4ee5\u5b58null\nvar phone: String? = null\n\nphone = \"13912345678\"\n\n\/\/\u5b89\u5168\u8c03\u7528 ?.length \uff0c\u5982\u679cphone=null\u4e0d\u4f1a\u62a5\u9519\nprintln(phone?.length)\n\n\/\/ Elvis ?: null\u7684\u65f6\u5019\u8fd4\u56de\u9ed8\u8ba4\u503c0\nval len = phone?.length ?: 0\nprintln(len)\n\nphone = null\nval len2 = phone?.length ?: -1\nprintln(len2) \/\/-1\n\n\/\/ !! \u5f3a\u5236\u975e\u7a7a\uff0cphone=null\u4f1a\u76f4\u63a5\u629b\u51fa\u7a7a\u6307\u9488\u5f02\u5e38\uff0c\u614e\u7528\n\/\/ println(phone!!.length)\n}<\/code><\/pre>\n<h2>5. \u6761\u4ef6\u5224\u65ad if-else<\/h2>\n<p>Kotlin \u4e2d if \u662f\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u6709\u8fd4\u56de\u503c\uff0c\u4e0d\u9700\u8981\u4e09\u5143\u8fd0\u7b97\u7b26<\/p>\n<pre><code>fun main() {\nval score = 75\n\/\/ \u666e\u901aif else\nif (score &gt;= 60) {\n    println(\"\u53ca\u683c\")\n} else {\n    println(\"\u4e0d\u53ca\u683c\")\n}\n\n\/\/ if\u4f5c\u4e3a\u8868\u8fbe\u5f0f\uff0c\u8fd4\u56de\u7ed3\u679c\u8d4b\u503c\u7ed9\u53d8\u91cf\nval result = if (score &gt;=60) \"\u53ca\u683c\" else \"\u4e0d\u53ca\u683c\"\nprintln(result)\n}<\/code><\/pre>\n<h2>6. when \u591a\u5206\u652f\uff08\u66ff\u4ee3 Java switch\uff09<\/h2>\n<p>\u652f\u6301\u5e38\u91cf\u3001\u533a\u95f4\u3001\u6761\u4ef6\u5224\u65ad\uff0c\u5f3a\u5927\u5f88\u591a<\/p>\n<pre><code>fun main() {\nval num = 3\nwhen(num){\n    1 -&gt; println(\"\u6570\u5b571\")\n    2 -&gt; println(\"\u6570\u5b572\")\n    3 -&gt; println(\"\u6570\u5b573\")\n    else -&gt; println(\"\u5176\u4ed6\u6570\u5b57\")\n}\n\n\/\/ when\u8868\u8fbe\u5f0f\uff0c\u8fd4\u56de\u503c\nval msg = when(num){\n    1 -&gt; \"\u4e00\"\n    2 -&gt; \"\u4e8c\"\n    in 3..10 -&gt; \"3\u523010\u4e4b\u95f4\" \/\/\u533a\u95f4\u5224\u65ad\n    else -&gt; \"\u672a\u77e5\"\n}\nprintln(msg)\n}<\/code><\/pre>\n<h2>7. \u5faa\u73af for \/while<\/h2>\n<p>for \u5faa\u73af<\/p>\n<pre><code>fun main() {\n\/\/ \u533a\u95f4 1..10  [1,10] \u5305\u542b10\nfor(i in 1..10){\n    print(\"$i \")\n}\nprintln()\n\n\/\/ until\uff1a\u4e0d\u5305\u542b\u7ed3\u675f\u503c 1 until 10 \u219219\nfor(i in 1 until 10){\n    print(\"$i \")\n}\nprintln()\n\n\/\/ step \u6b65\u957f\nfor(i in 1..10 step 2){\n    print(\"$i \")\n}\nprintln()\n\n\/\/ downTo \u5012\u5e8f\nfor(i in 10 downTo 1){\n    print(\"$i \")\n}\nprintln()\n\n\/\/\u904d\u5386\u96c6\u5408\nval list = listOf(\"\u82f9\u679c\",\"\u9999\u8549\",\"\u6a59\u5b50\")\nfor(item in list){\n    println(item)\n}\n}<\/code><\/pre>\n<p>while \/ do while<\/p>\n<pre><code>fun main() {\nvar i = 0\nwhile(i &lt; 5){\n    println(i)\n    i++\n}\n\n\/\/ do while \u81f3\u5c11\u6267\u884c\u4e00\u6b21\nvar j =0\ndo {\n    println(j)\n    j++\n}while(j&lt;3)\n}<\/code><\/pre>\n<h2>8. \u51fd\u6570 fun<\/h2>\n<p>\u8bed\u6cd5\uff1afun \u51fd\u6570\u540d(\u53c2\u6570:\u7c7b\u578b):\u8fd4\u56de\u503c\u7c7b\u578b { }<\/p>\n<\/li>\n<li>\u8fd4\u56de\u503c Unit\u7b49\u4ef7 Java void\uff0c\u53ef\u4ee5\u7701\u7565\u4e0d\u5199\n<pre><code>\n\/\/\u65e0\u8fd4\u56de\u503c\nfun sayHello(name: String){\nprintln(\"Hello $name\")\n}<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\/\/\u6709\u8fd4\u56de\u503c Int<br \/>\nfun add(a:Int, b:Int): Int{<br \/>\nreturn a + b<br \/>\n}<\/p>\n<p>\/\/\u5355\u8868\u8fbe\u5f0f\u51fd\u6570\uff0c\u53ef\u4ee5\u7b80\u5316\u5199\u6cd5\uff0c\u7701\u7565return<br \/>\nfun addShort(a:Int,b:Int) = a + b<\/p>\n<p>\/\/\u53c2\u6570\u9ed8\u8ba4\u503c<br \/>\nfun showInfo(name:String, age:Int = 18){<br \/>\nprintln(&#8220;\u59d3\u540d:$name \u5e74\u9f84:$age&#8221;)<br \/>\n}<\/p>\n<p>fun main() {<br \/>\nsayHello(&#8220;Kotlin&#8221;)<br \/>\nprintln(add(3,5))<br \/>\nprintln(addShort(2,4))<br \/>\nshowInfo(&#8220;\u5f20\u4e09&#8221;) \/\/ age\u4f7f\u7528\u9ed8\u8ba4\u503c18<br \/>\nshowInfo(&#8220;\u674e\u56db&#8221;, 25)<br \/>\n}<\/p>\n<pre><code>## 9. \u7c7b\u4e0e\u5bf9\u8c61 class\n<\/code><\/pre>\n<p>\/\/\u666e\u901a\u7c7b<br \/>\nclass Person {<br \/>\nvar name: String = &#8220;&#8221;<br \/>\nvar age: Int = 0<\/p>\n<pre><code>fun show(){\n    println(\"name=$name age=$age\")\n}<\/code><\/pre>\n<p>}<\/p>\n<p>\/\/\u4e3b\u6784\u9020\u51fd\u6570\u7b80\u5199\uff08\u6700\u5e38\u7528\uff09<br \/>\nclass Student(val name: String, var age: Int) {<br \/>\nfun printInfo(){<br \/>\nprintln(&#8220;\u5b66\u751f\uff1a$ name\uff0c$age\u5c81&#8221;)<br \/>\n}<br \/>\n}<\/p>\n<p>fun main() {<br \/>\nval p = Person()<br \/>\np.name = &#8220;\u8001\u738b&#8221;<br \/>\np.age = 30<br \/>\np.show()<\/p>\n<pre><code>val s = Student(\"\u5c0f\u5f20\",16)\ns.printInfo()\n\/\/ s.name = \"aaa\" \/\/ val\u53ea\u8bfb\uff0c\u4e0d\u80fd\u4fee\u6539\ns.age =17 \/\/ var\u53ef\u4ee5\u4fee\u6539<\/code><\/pre>\n<p>}<\/p>\n<pre><code>\n## \u4f34\u751f\u5bf9\u8c61 companion object\n\u76f8\u5f53\u4e8e Java \u9759\u6001\u6210\u5458\uff0cKotlin \u6ca1\u6709 static \u5173\u952e\u5b57<\/code><\/pre>\n<p>class Demo{<br \/>\ncompanion object{<br \/>\nval VERSION = &#8220;1.0&#8221;<br \/>\nfun staticFunc(){<br \/>\nprintln(&#8220;\u4f34\u751f\u5bf9\u8c61\u51fd\u6570\uff0c\u7c7b\u4f3c\u9759\u6001\u65b9\u6cd5&#8221;)<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p>fun main() {<br \/>\nprintln(Demo.VERSION)<br \/>\nDemo.staticFunc()<br \/>\n}<\/p>\n<pre><code>## 10. \u96c6\u5408 List \/ MutableList\uff1bSet \/ Map\n* \u53ea\u8bfb\u96c6\u5408\uff1alistOf()\uff0c\u4e0d\u80fd\u589e\u5220\u6539\n* \u53ef\u53d8\u96c6\u5408\uff1amutableListOf()\uff0c\u53ef\u4ee5 add remove<\/code><\/pre>\n<p>fun main() {<br \/>\n\/\/\u53ea\u8bfbList<br \/>\nval list = listOf(&#8220;A&#8221;,&#8221;B&#8221;,&#8221;C&#8221;)<br \/>\nprintln(list[0])<\/p>\n<pre><code>\/\/\u53ef\u53d8List\nval mList = mutableListOf&lt;String&gt;()\nmList.add(\"\u5f20\u4e09\")\nmList.add(\"\u674e\u56db\")\nmList.remove(\"\u5f20\u4e09\")\nprintln(mList)\n\n\/\/ Map \u952e\u503c\u5bf9\nval map = mapOf(\"a\" to 1, \"b\" to 2)\nprintln(map[\"a\"])\n\nval mMap = mutableMapOf&lt;String,Int&gt;()\nmMap[\"key1\"] = 100\nprintln(mMap[\"key1\"])<\/code><\/pre>\n<p>}<\/p>\n<pre><code>## 11. \u7a7a\u5b89\u5168\u7efc\u5408\u5b8c\u6574\u6848\u4f8b\uff08\u4f60\u622a\u56fe\u90a3\u5957\u4ee3\u7801\u5b8c\u6574\u7248\uff09<\/code><\/pre>\n<p>fun main() {<br \/>\n\/\/ val\u53ea\u8bfb<br \/>\nval name: String = &#8220;\u5f20\u4e09&#8221;<\/p>\n<pre><code>\/\/ var\u53ef\u53d8\nvar age: Int =18\nage =20\n\n\/\/\u81ea\u52a8\u63a8\u5bfc\u7c7b\u578b\nval height =175.5\n\n\/\/\u5b57\u7b26\u4e32\u6a21\u677f\nval info = \"\u59d3\u540d\uff1a$name\uff0c\u5e74\u9f84\uff1a$age\uff0c\u8eab\u9ad8\uff1a${height}cm\"\nprintln(info)\n\n\/\/\u53ef\u7a7a\u7c7b\u578b\nvar phone: String? = null\nphone = \"13800138000\"\n\n\/\/\u5b89\u5168\u8c03\u7528 ?.\nprintln(phone?.length)\n\n\/\/Elvis ?:\nval len = phone?.length ?: 0\nprintln(len)<\/code><\/pre>\n<p>}<\/p>\n<pre><code>\n## Kotlin \u5b66\u4e60\u987a\u5e8f\u5efa\u8bae\n\n1.val\/var\u3001\u57fa\u7840\u6570\u636e\u7c7b\u578b\n2.\u5b57\u7b26\u4e32\u6a21\u677f\n3.\u53ef\u7a7a\u7c7b\u578b\uff1f?. ?:\uff08Kotlin \u6700\u91cd\u8981\u7279\u6027\uff0c\u533a\u5206 Java\uff09\n4.if-else\u3001when\u3001\u5faa\u73af\n5.\u51fd\u6570 fun\u3001\u9ed8\u8ba4\u53c2\u6570\n6.\u7c7b\u3001\u6784\u9020\u51fd\u6570\u3001\u4f34\u751f\u5bf9\u8c61\n7.\u96c6\u5408 List\/Map\n8.\u7ee7\u627f\u3001\u63a5\u53e3\u3001\u6570\u636e\u7c7b data class\n9.Lambda\u3001\u9ad8\u9636\u51fd\u6570\n10.\u534f\u7a0b\uff08Android \u5f00\u53d1\u91cd\u70b9\uff09\nText(\n    text = \"\u5f20\u4e09\u4eca\u5e7418\u5c81\",\n    color = Color.Red,                 \/\/\u6587\u5b57\u989c\u8272\n    fontSize = 20.sp,                  \/\/\u5b57\u53f7 sp\n    fontWeight = FontWeight.Bold,      \/\/\u5b57\u91cd\uff08\u7c97\u4f53\uff09\n    fontStyle = FontStyle.Italic,      \/\/\u659c\u4f53\n    letterSpacing = 2.sp,              \/\/\u5b57\u95f4\u8ddd\n    lineHeight = 30.sp,                \/\/\u884c\u9ad8\n    maxLines = 2,                      \/\/\u6700\u5927\u663e\u793a\u884c\u6570\n    overflow = TextOverflow.Ellipsis,  \/\/\u6587\u5b57\u6ea2\u51fa\uff1a...\u7701\u7565\u53f7\n    textAlign = TextAlign.Center,      \/\/\u6587\u5b57\u5bf9\u9f50\n    textDecoration = TextDecoration.Underline, \/\/\u4e0b\u5212\u7ebf\n    modifier = Modifier\n        .background(Color.LightGray)   \/\/\u6587\u5b57\u80cc\u666f\u5e95\u8272\n        .padding(10.dp)                \/\/\u5185\u8fb9\u8ddd\n)\n## \u9010\u4e2a\u89e3\u91ca\n### 1. \u5b57\u4f53\u7c97\u7ec6 fontWeight\nfontWeight = FontWeight.Bold     \/\/\u7c97\u4f53\nfontWeight = FontWeight.Normal   \/\/\u6b63\u5e38\uff08\u9ed8\u8ba4\uff09\nfontWeight = FontWeight.Light    \/\/\u7ec6\u4f53\n### 2. \u659c\u4f53 fontStyle\nfontStyle = FontStyle.Italic   \/\/\u659c\u4f53\nfontStyle = FontStyle.Normal   \/\/\u6b63\u5e38\n### 3. \u5b57\u95f4\u8ddd letterSpacing \u5b57\u7b26\u4e4b\u95f4\u62c9\u5f00\u8ddd\u79bb\nletterSpacing = 1.sp\n### 4. \u884c\u9ad8 lineHeight\uff0c\u591a\u884c\u6587\u5b57\u6bcf\u884c\u4e4b\u95f4\u8ddd\u79bb\nlineHeight = 28.sp\n### 5. \u884c\u6570\u63a7\u5236\u3001\u6587\u5b57\u6ea2\u51fa\uff08\u957f\u6587\u672c\uff09\nmaxLines = 1,                          \/\/\u53ea\u5141\u8bb81\u884c\noverflow = TextOverflow.Ellipsis,       \/\/\u8d85\u51fa\u663e\u793a \u2026\n\/\/ overflow = TextOverflow.Clip        \/\/\u76f4\u63a5\u622a\u65ad\u5207\u6389\n\/\/ overflow = TextOverflow.Visible    \/\/\u5168\u90e8\u663e\u793a\uff0c\u6ea2\u51fa\n### 6. \u6587\u5b57\u5bf9\u9f50 textAlign\ntextAlign = TextAlign.Center     \/\/\u5c45\u4e2d\ntextAlign = TextAlign.Start      \/\/\u9760\u5de6(\u9ed8\u8ba4)\ntextAlign = TextAlign.End        \/\/\u9760\u53f3\ntextAlign = TextAlign.Justify    \/\/\u4e24\u7aef\u5bf9\u9f50\n\u26a0\ufe0f\u6ce8\u610f\uff1atextAlign\u751f\u6548\u9700\u8981 Text \u672c\u8eab\u6709\u8db3\u591f\u5bbd\u5ea6\uff0cModifier.fillMaxWidth ()\nText(\n    \"\u5f20\u4e09\u4eca\u5e7418\u5c81\",\n    textAlign = TextAlign.Center,\n    modifier = Modifier.fillMaxWidth()\n)\n### 7. \u4e0b\u5212\u7ebf\u3001\u5220\u9664\u7ebf textDecoration\ntextDecoration = TextDecoration.Underline      \/\/\u4e0b\u5212\u7ebf\ntextDecoration = TextDecoration.LineThrough   \/\/\u5220\u9664\u7ebf\uff08\u5212\u6389\u6587\u5b57\uff09\ntextDecoration = TextDecoration.None          \/\/\u65e0\u88c5\u9970\u9ed8\u8ba4\n8.modifier \u7ed9 Text \u7ec4\u4ef6\u52a0\u4fee\u9970\uff08\u80cc\u666f\u3001\u8fb9\u8ddd\uff09\nmodifier = Modifier\n    .background(Color(0xFFEEEEEE)) \/\/\u80cc\u666f\u989c\u8272\n    .padding(horizontal = 15.dp, vertical = 8.dp)\n    .fillMaxWidth()\n### 8. \u4f7f\u7528\u73b0\u6210 Material3 \u6587\u5b57\u6837\u5f0f\uff08\u63a8\u8350\u6b63\u5f0f\u9879\u76ee\uff09\n\u4e0d\u7528\u81ea\u5df1\u5199\u4e00\u5806 fontSize\u3001fontWeight\uff0c\u76f4\u63a5\u5957\u4e3b\u9898\u6837\u5f0f\nText(\n    \"\u5f20\u4e09\u4eca\u5e7418\u5c81\",\n    style = MaterialTheme.typography.titleMedium\n)\n1\ufe0f\u20e3 \u663e\u793a\u6587\u5b57\uff1aText\nvar age = 20\nText(\"\u5c0f\u674e\u4eca\u5e74$age \u5c81\", fontSize = 20.sp, color = Color.Black)\n2\ufe0f\u20e3 \u8f93\u5165\u6846\uff1aOutlinedTextField\uff08\u4f60\u5199\u5947\u5076\u5224\u65ad\u7528\u8fc7\uff09\n\u7528\u6237\u8f93\u5165\u6587\u5b57\nvar inputText by remember { mutableStateOf(\"\") }\nOutlinedTextField(\n    value = inputText,\n    onValueChange = { inputText = it },\n    label = { Text(\"\u8bf7\u8f93\u5165\u540d\u5b57\") }\n)\n3\ufe0f\u20e3 \u6309\u94ae\uff1aButton \/ ElevatedButton\n\u70b9\u51fb\u89e6\u53d1\u4e8b\u4ef6\nvar count by remember { mutableStateOf(0) }\nButton(onClick = { count++ }) {\n    Text(\"\u70b9\u51fb\uff1a$count\")\n}\n\n\/\/ \u51f8\u8d77\u6309\u94ae\nElevatedButton(onClick = {}) {\n    Text(\"\u51f8\u8d77\u6309\u94ae\")\n}\n\n\/\/\u6587\u5b57\u6309\u94ae\uff0c\u65e0\u80cc\u666f\nTextButton(onClick = {}) {\n    Text(\"\u6587\u5b57\u6309\u94ae\")\n}\n4\ufe0f\u20e3 \u5e03\u5c40\u5bb9\u5668\uff08\u653e\u522b\u7684\u63a7\u4ef6\uff09\nColumn\uff1a\u5782\u76f4\u6392\u5217\uff08\u4ece\u4e0a\u5f80\u4e0b\uff09\nColumn {\n    Text(\"\u7b2c\u4e00\u884c\")\n    Text(\"\u7b2c\u4e8c\u884c\")\n}\nRow\uff1a\u6c34\u5e73\u6392\u5217\uff08\u4ece\u5de6\u5f80\u53f3\uff09\nRow {\n    Text(\"\u5de6\u8fb9\")\n    Text(\"\u53f3\u8fb9\")\n}\nBox\uff1a\u5c42\u53e0\u5e03\u5c40\uff0c\u63a7\u4ef6\u53ef\u4ee5\u91cd\u53e0\nBox {\n    Text(\"\u5e95\u5c42\u6587\u5b57\")\n    Text(\"\u76d6\u5728\u4e0a\u9762\", color = Color.Red)\n}\n5\ufe0f\u20e3 \u590d\u9009\u6846 Checkbox\n\u52fe\u9009\u3001\u53d6\u6d88\u52fe\u9009\nvar checked by remember { mutableStateOf(false) }\nCheckbox(\n    checked = checked,\n    onCheckedChange = { checked = it }\n)\nText(text = if(checked) \"\u5df2\u52fe\u9009\" else \"\u672a\u52fe\u9009\")\n6\ufe0f\u20e3 \u5355\u9009\u6309\u94ae RadioButton\n\u591a\u9009\u4e00\nvar selectId by remember { mutableStateOf(1) }\nRow {\n    RadioButton(\n        selected = selectId ==1,\n        onClick = { selectId =1 }\n    )\n    Text(\"\u9009\u9879A\")\n\n    RadioButton(\n        selected = selectId ==2,\n        onClick = { selectId =2 }\n    )\n    Text(\"\u9009\u9879B\")\n}\n7\ufe0f\u20e3 \u5f00\u5173 Switch\n\u7c7b\u4f3c\u624b\u673a\u8bbe\u7f6e\u5f00\u5173\nvar switchState by remember { mutableStateOf(false) }\nSwitch(\n    checked = switchState,\n    onCheckedChange = { switchState = it }\n)\n8\ufe0f\u20e3 \u6ed1\u5757 Slider\n\u62d6\u52a8\u9009\u62e9\u6570\u5b57\nvar progress by remember { mutableStateOf(50f) }\nSlider(\n    value = progress,\n    onValueChange = { progress = it },\n    valueRange = 0f..100f\n)\nText(\"\u5f53\u524d\u6570\u503c\uff1a${progress.toInt()}\")\n9\ufe0f\u20e3 \u56fe\u7247 Image\n\u663e\u793a\u56fe\u7247\u8d44\u6e90\nImage(\n    painter = painterResource(id = R.mipmap.ic_launcher),\n    contentDescription = \"\u56fe\u6807\",\n    modifier = Modifier.size(60.dp)\n)\n\ud83d\udd1f \u5206\u5272\u7ebf Divider\n\u753b\u4e00\u6761\u6a2a\u7ebf\u505a\u5206\u9694\nDivider(thickness = 1.dp, color = Color.Gray)\n11\ufe0f\u20e3 \u5217\u8868 LazyColumn\uff08\u6700\u91cd\u8981\uff01\u957f\u5217\u8868\uff0c\u66ff\u4ee3 ListView\uff09\n\u6eda\u52a8\u5217\u8868\uff0c\u7c7b\u4f3c RecyclerView\nval list = remember { mutableStateListOf(\"\u82f9\u679c\",\"\u9999\u8549\",\"\u6a59\u5b50\") }\nLazyColumn {\n    items(list) { item -&gt;\n        Text(item, modifier = Modifier.padding(10.dp))\n    }\n}\n12\ufe0f\u20e3 \u4e0b\u62c9\u83dc\u5355 DropdownMenu\n\u4e0b\u62c9\u9009\u62e9\u6846\nvar expand by remember { mutableStateOf(false) }\nvar selectText by remember { mutableStateOf(\"\u8bf7\u9009\u62e9\") }\n\nButton(onClick = { expand = true }) {\n    Text(selectText)\n}\nDropdownMenu(expanded = expand, onDismissRequest = { expand=false }) {\n    DropdownMenuItem(text={Text(\"\u5317\u4eac\")}, onClick = { selectText=\"\u5317\u4eac\"; expand=false })\n    DropdownMenuItem(text={Text(\"\u4e0a\u6d77\")}, onClick = { selectText=\"\u4e0a\u6d77\"; expand=false })\n}\n13\ufe0f\u20e3 Card \u5361\u7247\n\u5e26\u5706\u89d2\u9634\u5f71\u5361\u7247\u5bb9\u5668\nCard(modifier = Modifier.padding(10.dp)) {\n    Text(\"\u5361\u7247\u91cc\u9762\u7684\u6587\u5b57\", modifier=Modifier.padding(16.dp))\n}\n\n## \u5feb\u901f\u8bb0\u5fc6\u5206\u7c7b\n\n1.\u663e\u793a\u7c7b\uff1aText\u3001Image\n2.\u8f93\u5165\u4ea4\u4e92\uff1aOutlinedTextField\u3001Checkbox\u3001RadioButton\u3001Switch\u3001Slider\n3.\u70b9\u51fb\uff1aButton\u3001ElevatedButton\u3001TextButton\n4.\u5e03\u5c40\u5bb9\u5668\uff1aColumn(\u5782\u76f4)\u3001Row(\u6c34\u5e73)\u3001Box(\u5c42\u53e0)\u3001Card\n5.\u6eda\u52a8\u5217\u8868\uff1aLazyColumn\uff08\u5782\u76f4\u5217\u8868\uff09 \/ LazyRow\uff08\u6c34\u5e73\u5217\u8868\uff09\n6.\u8f85\u52a9\uff1aDivider\u5206\u5272\u7ebf<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Kotlin \u57fa\u7840\u5b8c\u6574\u5b66\u4e60\u7b14\u8bb0 + \u53ef\u8fd0\u884c\u6848\u4f8b \u5efa\u8bae\uff1a\u65b0\u5efa Kotlin\/JVM Library \u6a21\u5757\u8fd0\u884c\u4e0b\u9762 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[23],"class_list":["post-422","post","type-post","status-publish","format-standard","hentry","category-jsj","tag-kotlin"],"_links":{"self":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/comments?post=422"}],"version-history":[{"count":2,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/422\/revisions"}],"predecessor-version":[{"id":464,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/422\/revisions\/464"}],"wp:attachment":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/media?parent=422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/categories?post=422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/tags?post=422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}