Android EditText監(jiān)聽回車鍵并處理兩次回調(diào)問(wèn)題
前言
我們都知道,在登面,搜索等等有EditText控件的界面上,當(dāng)用戶輸入完內(nèi)容后,點(diǎn)擊回車鍵執(zhí)行邏輯會(huì)有非常好的用戶體驗(yàn),所以今天我們來(lái)學(xué)習(xí)如何監(jiān)聽EditText監(jiān)聽回車鍵并處理監(jiān)聽時(shí)發(fā)生了兩次回調(diào)問(wèn)題。
代碼
首先我們?cè)趚ml布局中添加一個(gè)要監(jiān)聽的EditText
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/et_text" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
要想監(jiān)聽到軟鍵盤按下什么鍵,就需要使用setOnKeyListener方法,在Activity中,我們編寫監(jiān)聽代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
EditText et = findViewById(R.id.et_text);
et.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return false;
}
});
}
接下來(lái)在onKey方法中監(jiān)聽回車鍵
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
EditText et = findViewById(R.id.et_text);
et.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER){
Log.e("MainActivity", "onKey: 按下回車鍵");
return true;
}
return false;
}
});
}
我們運(yùn)行起來(lái),并在EditText中點(diǎn)擊回車鍵,會(huì)看到如下日志
E/MainActivity: onKey: 按下回車鍵
E/MainActivity: onKey: 按下回車鍵
為什么我們會(huì)看到兩次日志輸入呢?
兩次回調(diào)解答并解決
我們都知道,當(dāng)我們按某個(gè)鍵的時(shí)候,鍵盤有按下和抬起兩個(gè)操作,所以這里兩次回調(diào)就是回車按下時(shí),回調(diào)一次,回車鍵抬起時(shí),回調(diào)一次。
要解決這個(gè)辦法非常簡(jiǎn)單,我們只需要多加一個(gè)條件判斷,是抬起還是按下即可
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
EditText et = findViewById(R.id.et_text);
et.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
Log.e("MainActivity", "onKey: 按下回車鍵");
return true;
}
return false;
}
});
}
我們?cè)龠\(yùn)行看看,點(diǎn)擊回車后,日志輸出
E/MainActivity: onKey: 按下回車鍵
也可以修改editText的回車樣式,即是把EditText的ImeOptions屬性設(shè)置成不同的值,Enter鍵上就會(huì)顯示不同的文字或圖案
actionNone : 回車鍵,按下后光標(biāo)到下一行
actionGo : Go,
actionSearch : 一個(gè)放大鏡
actionSend : Send
actionNext : Next
actionDone : Done,隱藏軟鍵盤,即使不是最后一個(gè)文本輸入框
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程使用sax解析xml數(shù)據(jù)的方法詳解
這篇文章主要介紹了Android編程使用sax解析xml數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android使用sax解析xml數(shù)據(jù)的操作步驟及界面布局、單元測(cè)試等相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
android 調(diào)用JNI SO動(dòng)態(tài)庫(kù)的方法
android 調(diào)用JNI 分為靜態(tài)調(diào)用與動(dòng)態(tài)調(diào)用,接下來(lái)通過(guò)本文給大家介紹android 調(diào)用JNI SO動(dòng)態(tài)庫(kù)的方法,感興趣的朋友一起看看吧2021-11-11
Android 實(shí)現(xiàn)切圓圖作為頭像使用實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)切圓圖作為頭像使用實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android從0到完整項(xiàng)目(1)使用Android studio 創(chuàng)建項(xiàng)目詳解
本篇文章主要介紹了Android從0到完整項(xiàng)目(1)使用Android studio 創(chuàng)建項(xiàng)目詳解,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07
Android編程中調(diào)用Camera時(shí)預(yù)覽畫面有旋轉(zhuǎn)問(wèn)題的解決方法
這篇文章主要介紹了Android編程中調(diào)用Camera時(shí)預(yù)覽畫面有旋轉(zhuǎn)問(wèn)題的解決方法,涉及Android針對(duì)Camera調(diào)用攝像頭源碼部分的相關(guān)修改技巧,需要的朋友可以參考下2015-11-11
Android實(shí)現(xiàn)H5與Native交互的兩種方式
Android實(shí)現(xiàn)H5頁(yè)面和Native頁(yè)面交互的方法有兩種,一種是Url攔截的方法,另一種是JavaScript注入,下面來(lái)通過(guò)這篇文章分別講解。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Android開發(fā)自學(xué)筆記(五):使用代碼控制界面
這篇文章主要介紹了Android開發(fā)自學(xué)筆記(五):使用代碼控制界面,本文講解了添加第二個(gè)layout、添加MyActivity的code、setup函數(shù)、getResult函數(shù)等內(nèi)容,需要的朋友可以參考下2015-04-04

