Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเพิ่มคีย์บอร์ด Emoji ในแอป Android

ภาพรวม

ตัวอย่างนี้สาธิตวิธีการเพิ่มคีย์บอร์ด Emoji (Emoji Keyboard) ในแอป Android โดยใช้ Library SuperNova-Emoji ซึ่งรองรับ Emoji ทุกรุ่น และสามารถสลับระหว่างคีย์บอร์ดระบบและ Emoji Keyboard ได้

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: เพิ่ม Dependency (build.gradle)


allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' } <!-- จำเป็น -->
    }
}


dependencies {
    implementation 'com.github.hani-momanii:SuperNova-Emoji:1.1'
    // หรือเวอร์ชันใหม่กว่า
    // implementation 'com.github.hani-momanii:SuperNova-Emoji:1.2'
}

ขั้นตอนที่ 3: ออกแบบ Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:emojicon="https://schemas.android.com/apk/res-auto"
    android:id="@+id/root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

    <!-- ปุ่ม Emoji -->
    <ImageView
        android:id="@+id/emoji_btn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_margin="8dp"
        android:padding="4dp"
        android:src="@android:drawable/ic_menu_emoji" />

    <!-- ปุ่มส่ง -->
    <ImageView
        android:id="@+id/submit_btn"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="8dp"
        android:padding="4dp"
        android:src="@android:drawable/ic_menu_send" />

    <!-- EditText รองรับ Emoji (บรรทัดล่าง) -->
    <hani.momanii.supernova_emoji_library.Helper.EmojiconEditText
        android:id="@+id/emojicon_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toLeftOf="@id/submit_btn"
        android:layout_toRightOf="@id/emoji_btn"
        android:imeOptions="actionSend"
        android:inputType="text|textMultiLine"
        android:hint="พิมพ์ข้อความ..."
        emojicon:emojiconSize="28sp"/>

    <!-- EditText รองรับ Emoji (บรรทัดบน) -->
    <hani.momanii.supernova_emoji_library.Helper.EmojiconEditText
        android:id="@+id/emojicon_edit_text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/emojicon_edit_text"
        android:imeOptions="actionSend"
        android:inputType="text|textMultiLine"
        android:hint="ข้อความเพิ่มเติม..."
        emojicon:emojiconSize="28sp"/>

    <!-- Checkbox สลับ System Emoji -->
    <CheckBox
        android:id="@+id/use_system_default"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/emojicon_edit_text2"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:text="ใช้ Emoji ของระบบ"/>

    <!-- TextView แสดง Emoji -->
    <hani.momanii.supernova_emoji_library.Helper.EmojiconTextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginTop="26dp"
        android:lineSpacingExtra="17sp"
        android:text="Hello Emojis! 😀🎉"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="#000000"
        emojicon:emojiconAlignment="bottom"/>

</RelativeLayout>

ขั้นตอนที่ 4: เขียนโค้ด MainActivity (src/MainActivity.java)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;

import hani.momanii.supernova_emoji_library.Actions.EmojIconActions;
import hani.momanii.supernova_emoji_library.Helper.EmojiconEditText;
import hani.momanii.supernova_emoji_library.Helper.EmojiconTextView;

public class MainActivity extends AppCompatActivity {
    CheckBox mCheckBox;
    EmojiconEditText emojiconEditText, emojiconEditText2;
    EmojiconTextView textView;
    ImageView emojiButton, submitButton;
    View rootView;
    EmojIconActions emojIcon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rootView = findViewById(R.id.root_view);
        emojiButton = findViewById(R.id.emoji_btn);
        submitButton = findViewById(R.id.submit_btn);
        mCheckBox = findViewById(R.id.use_system_default);
        emojiconEditText = findViewById(R.id.emojicon_edit_text);
        emojiconEditText2 = findViewById(R.id.emojicon_edit_text2);
        textView = findViewById(R.id.textView);

        // 🔑 เริ่มต้น EmojIconActions
        emojIcon = new EmojIconActions(this, rootView, emojiconEditText, emojiButton);
        emojIcon.ShowEmojIcon();

        // Listener สำหรับ Keyboard Open/Close
        emojIcon.setKeyboardListener(new EmojIconActions.KeyboardListener() {
            @Override
            public void onKeyboardOpen() {
                Log.e("Keyboard", "open");
            }
            @Override
            public void onKeyboardClose() {
                Log.e("Keyboard", "close");
            }
        });

        // สลับระหว่าง System Emoji และ Library Emoji
        mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                emojIcon.setUseSystemEmoji(isChecked);
                textView.setUseSystemDefault(isChecked);
            }
        });

        // เพิ่ม EditText อื่นๆ ให้รองรับ Emoji Keyboard เดียวกัน
        emojIcon.addEmojiconEditTextList(emojiconEditText2);

        // ปุ่มส่ง - นำข้อความไปแสดงที่ TextView
        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String newText = emojiconEditText.getText().toString();
                textView.setText(newText);
            }
        });
    }
}

ขั้นตอนที่ 5: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <activity android:name=".MainActivity"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Library Emoji อื่นๆ ที่นิยม

Libraryคุณสมบัติ
SuperNova-Emojiง่าย ใช้งานได้เลย รองรับ EditText/TextView หลายตัว
EmojiCompat (Google)Official library รองรับ Emoji ล่าสุด บน Android ทุกเวอร์ชัน
EmojiRainAnimation Emoji ตกมาจากด้านบน

EmojiCompat (ทางเลือกของ Google - แนะนำ)

// build.gradle
implementation "androidx.emoji2:emoji2:1.2.0"
implementation "androidx.emoji2:emoji2-views:1.2.0"
implementation "androidx.emoji2:emoji2-bundled:1.2.0"

// ใช้ EmojiCompat.Init แบบ Bundled (ไม่ต้องดาวน์โหลดฟอนต์)
EmojiCompat.init(new BundledEmojiCompatConfig(this));

การทดสอบ

รันแอป กดปุ่ม Emoji (ไอคอนหน้าต่าง) จะแสดง Emoji Keyboard พิมพ์ Emoji ได้ ทดสอบสลับ System Emoji

วิธีเพิ่มคีย์บอร์ด Emoji ในแอป Android