Giới thiệu
Ví dụ này minh họa cơ chế cơ bản của một Input Method Editor (IME) - bàn phím mềm trên Android. Lưu ý: Đây là ví dụ đơn giản chỉ demo việc hiển thị text từ EditText, không phải IME hoàn chỉnh.
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Chọn "Empty Activity".
Bước 2: Giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp" />
<Button
android:id="@+id/btnShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editText"
android:layout_centerInParent="true"
android:layout_marginTop="5dp"
android:onClick="ShowText"
android:text="HIỂN THỊ TEXT" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btnShow"
android:layout_centerInParent="true"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Soft KeyBoard Demo"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
Bước 3: Code MainActivity (src/MainActivity.java)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
textView = findViewById(R.id.textView);
}
public void ShowText(View view) {
String newText = editText.getText().toString();
textView.setText(newText);
}
}
Bước 4: Manifest (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">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị thật, nhấn Run. Nhập text vào EditText, nhấn nút để hiển thị lên TextView.

Phát triển IME thực sự (Mở rộng)
Để tạo bàn phím mềm thực tế (như Gboard, SwiftKey), bạn cần:
- Kế thừa class
InputMethodService. - Triển khai giao diện bàn phím trong file XML layout riêng.
- Xử lý sự kiện nhấn phím, gửi ký tự qua
InputConnection. - Khai báo service trong Manifest với
android.permission.BIND_INPUT_METHODvà meta-dataandroid.view.im. - Xử lý nhiều ngôn ngữ, gợi ý từ, gesture typing, voice input...
Tài nguyên: Xem tài liệu chính thức Android IME và mẫu SoftKeyboard sample.