This commit is contained in:
Eric85710 2026-06-04 16:48:56 +08:00
parent 96944ca6b9
commit 620d2398af

View file

@ -29,25 +29,71 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
object EmojiProvider {
fun getSmileysAndPeople(): List<String> {
fun getFullEmojiPack(): List<String> {
val emojis = mutableListOf<String>()
// 1. 經典表情區間 (Smiley Faces): 😀 到 🪟
// 1. 經典表情與人類行為 (Smiley Faces & People)
// 包含:😀 🤣 😘 🤠 🧑‍⚕️ 🏃 等
for (i in 0x1F600..0x1F64F) {
if (Character.isValidCodePoint(i)) {
emojis.add(String(Character.toChars(i)))
}
addCodePointIfValid(i, emojis)
}
// 2. 常用手勢與身體部位 (Body & Gestures): 👍 👏 等
// 2. 身體部位、手勢與愛心 (Body, Gestures & Hearts)
// 包含:👋 👍 👏 💪 👁️ ❤️ 💔 等
for (i in 0x1F440..0x1F49F) {
if (Character.isValidCodePoint(i)) {
emojis.add(String(Character.toChars(i)))
}
addCodePointIfValid(i, emojis)
}
// 3. 額外追加的表情與角色 (Extended Smileys & Symbols)
// 包含:🥰 🤩 🥳 🥵 🥶 🥺 等較新版表情
for (i in 0x1F900..0x1F9FF) {
addCodePointIfValid(i, emojis)
}
// 4. 動物與大自然 (Animals & Nature)
// 包含:🐶 🐱 🦁 🦊 🐵 🦅 🌲 🌸 🌞 等
for (i in 0x1F400..0x1F43F) { // 常見動物頭像
addCodePointIfValid(i, emojis)
}
for (i in 0x1F1E6..0x1F1FF) { // 補充大自然元素
addCodePointIfValid(i, emojis)
}
// 5. 食物與飲料 (Food & Drink)
// 包含:🍏 🍓 🍔 🍕 🍣 🍦 🍺 ☕️ 等
for (i in 0x1F354..0x1F37F) {
addCodePointIfValid(i, emojis)
}
// 6. 運動、娛樂與活動 (Activities & Sports)
// 包含:⚽️ 🏀 🏈 🏆 🎮 🎤 🎬 🎨 等
for (i in 0x1F3A0..0x1F3C4) {
addCodePointIfValid(i, emojis)
}
// 7. 旅遊、交通工具與建築 (Travel & Places)
// 包含:🚗 ✈️ 🚀 🌋 🏖️ 🏥 🇨🇳 等
for (i in 0x1F680..0x1F6FF) {
addCodePointIfValid(i, emojis)
}
// 8. 物品、工具與雜項 (Objects & Tools)
// 包含:💻 📱 💡 🔑 🔨 📚 📦 💵 等
for (i in 0x1F4A0..0x1F4FF) {
addCodePointIfValid(i, emojis)
}
return emojis
}
/**
* 輔助函式:檢查該 Unicode 編碼在當前系統是否有效,若有效則轉成 String 存入
*/
private fun addCodePointIfValid(codePoint: Int, list: MutableList<String>) {
if (Character.isValidCodePoint(codePoint)) {
list.add(String(Character.toChars(codePoint)))
}
}
}
@Composable
@ -56,8 +102,8 @@ fun MessageEmojiBar(
onCancel: () -> Unit,
modifier: Modifier = Modifier
) {
// emoji pack
val emojiList = remember { EmojiProvider.getSmileysAndPeople() }
// 💡 修正 1:改為呼叫你實際定義的 getFullEmojiPack()
val emojiList = remember { EmojiProvider.getFullEmojiPack() }
Surface(
modifier = modifier
@ -85,14 +131,16 @@ fun MessageEmojiBar(
}
}
// 網格滾動區:塞了幾百個也能流暢滑動
// 網格滾動區
LazyVerticalGrid(
columns = GridCells.Fixed(6),
modifier = Modifier.fillMaxSize(),
horizontalArrangement = Arrangement.spacedBy(12.dp),
verticalArrangement = Arrangement.spacedBy(12.dp)
) {
items(emojiList) { emoji ->
// 💡 修正 2:明確指定 emoji 的型態為 String
// 這樣可以強迫編譯器去認對應的 items 擴充函式,徹底解決 Text(text = emoji) 報 Int 的錯誤
items(emojiList) { emoji: String ->
Box(
modifier = Modifier
.aspectRatio(1f)