ในขณะที่คนส่วนใหญ่ตอบคำถามโดยตรงฉันต้องการอธิบายเพิ่มเติมเกี่ยวกับแนวคิดเบื้องหลัง ก่อนอื่นฉันรู้สึกเป็นที่สนใจของ IME เมื่อฉันสร้างกิจกรรมการเข้าสู่ระบบเริ่มต้น มันสร้างรหัสสำหรับฉันซึ่งรวมถึงต่อไปนี้:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
คุณควรคุ้นเคยกับแอตทริบิวต์ inputType แล้ว นี่เป็นการแจ้งประเภทข้อความที่คาดหวังเช่น Android เช่นที่อยู่อีเมลรหัสผ่านหรือหมายเลขโทรศัพท์ รายการทั้งหมดของค่าที่เป็นไปได้อยู่ที่นี่ที่นี่
อย่างไรก็ตามมันเป็นคุณลักษณะimeOptions="actionUnspecified"
ที่ฉันไม่เข้าใจวัตถุประสงค์ของมัน Android InputMethodManager
ช่วยให้คุณสามารถโต้ตอบกับแป้นพิมพ์ที่ปรากฏขึ้นจากด้านล่างของหน้าจอเมื่อข้อความถูกเลือกใช้ ที่มุมด้านล่างของแป้นพิมพ์จะมีปุ่มโดยทั่วไปจะมีคำว่า "ถัดไป" หรือ "เสร็จสิ้น" ขึ้นอยู่กับช่องข้อความปัจจุบัน Android android:imeOptions
ช่วยให้คุณสามารถปรับแต่งโดยใช้ คุณสามารถระบุปุ่ม "ส่ง" หรือปุ่ม "ถัดไป" รายการเต็มสามารถพบได้ที่นี่ที่นี่
เมื่อถึงตอนนั้นคุณสามารถฟังการกดบนปุ่มการกระทำได้โดยการกำหนดTextView.OnEditorActionListener
สำหรับEditText
องค์ประกอบ ดังตัวอย่างของคุณ:
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
ตอนนี้ในตัวอย่างของฉันฉันมีandroid:imeOptions="actionUnspecified"
คุณลักษณะ สิ่งนี้มีประโยชน์เมื่อคุณต้องการเข้าสู่ระบบผู้ใช้เมื่อพวกเขากดปุ่ม Enter ในกิจกรรมของคุณคุณสามารถตรวจหาแท็กนี้แล้วลองลงชื่อเข้าใช้:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});