Wyświetl emotikony

Standardowy zestaw emotikonów jest odświeżany co roku przez Unicode, bo rośnie wykorzystanie emotikonów dla wszystkich typów aplikacji.

Jeśli aplikacja wyświetla treści internetowe lub umożliwia wpisywanie tekstu, zdecydowanie zalecamy obsługę najnowszych czcionek emotikonów. W przeciwnym razie później emotikony mogą być wyświetlane jako małe kwadratowe pole o nazwie tofu (☐) lub inne nieprawidłowo renderowane sekwencje emotikonów.

Android w wersji 11 (poziom interfejsu API 30) i starszych nie może aktualizować czcionki emotikonów, więc aplikacje, w których są wyświetlane, należy zaktualizować ręcznie.

Oto przykłady nowoczesnych emotikonów.

Przykłady Wersja
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (wrzesień 2021 r.)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (wrzesień 2020 r.)
🥲 🥷🏿 🐻‍❄️ 13.0 (marzec 2020 r.)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (październik 2019 r.)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (luty 2019 r.)

BOM – marzec 2023 r. (interfejs tworzenia wiadomości 1.4) wprowadza obsługę najnowszych emotikonów , w tym zgodność wsteczną ze starszymi wersjami Androida. do interfejsu API 21.

Ta pomoc nie wymaga wprowadzania żadnych zmian w aplikacji – jeśli używasz Text i TextField (Materiał 2 lub Materiał 3) lub BasicText i BasicTextField – nowoczesną obsługę emotikonów od razu po uruchomieniu.

Najlepszym sposobem na przetestowanie najnowszych emotikonów w aplikacji jest użycie rzeczywiste urządzenia z interfejsem API w wersji 30 lub starszej.

Jeśli używasz niestandardowych emotikonów lub chcesz wyłączyć domyślny emotikon w funkcji tworzenia wiadomości z innego powodu, możesz użyć PlatformTextStyle(emojiSupportMatch):

Text(
    text = "Hello $EMOJI_TEXT",
    style = TextStyle(
        platformStyle = PlatformTextStyle(
            emojiSupportMatch = EmojiSupportMatch.None
        )/* ... */
    )
)

Interoperacyjność

Jeśli w aplikacji w tym samym interfejsie Activity używasz jednocześnie widoków i tworzenia wiadomości, upewnij się, korzystają z odpowiednich interfejsów API, aby poprawnie konfigurować emotikony. Poniżej W sekcjach znajdziesz informacje o tym, kiedy należy używać poszczególnych interfejsów API.

Obowiązuje od ComponentActivity

Jeśli Activity wykracza poza opcję Utwórz ComponentActivity zamiast AppCompatActivity, postępuj zgodnie z emotikonami pomocy bez użycia AppCompat za instrukcje.

Nie masz rozszerzenia AppCompatActivity, więc dodaj Emoji2 biblioteka do zależności i używać EmojiTextView w widokach zamiast widżetu TextView, jak widać w tym fragmencie:

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val emojiTextView: EmojiTextView = findViewById(R.id.emoji_text_view)
        emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT)

        val composeView: ComposeView = findViewById(R.id.compose_view)

        composeView.apply {
            setContent {
                // compose code
            }
        }
    }
}

Następnie w pliku XML:

<androidx.emoji2.widget.EmojiTextView
    android:id="@+id/emoji_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />

Obowiązuje od AppCompatActivity

Jeśli Activity obejmuje dłuższy okres niż AppCompatActivity, możesz korzystać z ComposeView, aby wywołać funkcje kompozycyjne. Emotikony renderują się poprawnie na całej długości wersje Androida, które korzystają z funkcji kompozycyjnych tekstowych.

Jeśli rozszerzasz zakres z AppCompatActivity, zwiększ wartość TextView z XML aby emotikony były renderowane prawidłowo.

Dzieje się tak, gdy zwiększasz zawartość pliku XML:

  • na zewnątrz ComposeView, w: Activity. Zwróć uwagę na użycie AppCompatActivity i TextView w tym fragmencie:

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val emojiTextView: TextView = findViewById(R.id.emoji_text_view)
        emojiTextView.text = getString(R.string.emoji_text_view, EMOJI_TEXT)

        val composeView: ComposeView = findViewById(R.id.compose_view)

        composeView.apply {
            setContent {
                // compose code
            }
        }
    }
}

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(
            ComposeView(this).apply {
                setContent {
                    Column {
                        Text(EMOJI_TEXT)

                        AndroidViewBinding(ExampleViewBinding::inflate) {
                            emojiTextView.text = EMOJI_TEXT
                        }
                    }
                }
            }
        )
    }
}

Aby powiększyć tekst za pomocą symbolu AndroidView w elemencie ComposeView, użyj AppCompatTextView, aby prawidłowo renderować emotikony:

class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(
            ComposeView(this).apply {
                setContent {
                    Column {
                        Text(EMOJI_TEXT)

                        AndroidView(
                            factory = { context -> AppCompatTextView(context) },
                            update = { it.text = EMOJI_TEXT }
                        )
                    }
                }
            }
        )
    }
}

Szczegółowe informacje znajdziesz w dokumentacji interfejsów API współdziałania.

Rozwiązywanie problemów

Jeśli zamiast emotikonu widzisz tofu (☐), najpierw sprawdź, czy problem jest konkretne urządzenie testowe. Oto kilka głównych rzeczy, które możesz sprawdzić:

. .