কোটলিন ব্যবহার করে আমি একটি ফাংশন তৈরি করেছি যা কীবোর্ড সহ এডিটেক্সট এর জন্য সমস্ত ধরণের "সম্পন্ন" -র মতো ক্রিয়া পরিচালনা করে এবং এটিকে সংশোধন করা এবং আপনার ইচ্ছামত অন্যান্য কীগুলিও পরিচালনা করা সম্ভব:
private val DEFAULT_ACTIONS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT = arrayListOf(EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_GO, EditorInfo.IME_ACTION_SEARCH, EditorInfo.IME_ACTION_DONE)
private val DEFAULT_KEYS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT = arrayListOf(KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER)
fun EditText.setOnDoneListener(function: () -> Unit, onKeyListener: OnKeyListener? = null, onEditorActionListener: TextView.OnEditorActionListener? = null,
actionsToHandle: Collection<Int> = DEFAULT_ACTIONS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT,
keysToHandle: Collection<Int> = DEFAULT_KEYS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT) {
setOnEditorActionListener { v, actionId, event ->
if (onEditorActionListener?.onEditorAction(v, actionId, event) == true)
return@setOnEditorActionListener true
if (actionsToHandle.contains(actionId)) {
function.invoke()
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}
setOnKeyListener { v, keyCode, event ->
if (onKeyListener?.onKey(v, keyCode, event) == true)
return@setOnKeyListener true
if (event.action == KeyEvent.ACTION_DOWN && keysToHandle.contains(keyCode)) {
function.invoke()
return@setOnKeyListener true
}
return@setOnKeyListener false
}
}
সুতরাং, নমুনা ব্যবহার:
editText.setOnDoneListener({
//do something
})
লেবেল পরিবর্তন করার ক্ষেত্রে, আমি মনে করি এটি কীবোর্ড অ্যাপের উপর নির্ভর করে এবং এটি সাধারণত এখানে কেবলমাত্র ল্যান্ডস্কেপে পরিবর্তিত হয় । যাইহোক, উদাহরণস্বরূপ এর ব্যবহার:
editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setImeActionLabel("ASD", editText.imeOptions)
অথবা, আপনি যদি এক্সএমএলটিতে চান:
<EditText
android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:imeActionLabel="ZZZ" android:imeOptions="actionDone" />
এবং ফলাফল (আড়াআড়ি দেখানো):