今天程式設計碰到了乙個問題:有一款平板,開啟乙個有edittext的activity會預設彈出輸入法。為了解決這個問題就深入研究了下android中焦點focus和彈出輸入法的問題。在網上看了些例子都不夠全面,在這裡全面總結下。
一:edittext為什麼會預設彈出輸入法?
同樣的**,碰到有edittext控制項的介面時有的機子會彈出輸入法,有的機子不會彈出。不好意思,這問題我也一頭霧水,誰知道可以告訴我,否則我就把這個問題留下來,以後研究android原始碼時再搞個清楚。但是...我有解決方案。
二:預設彈出和預設關閉輸入法的解決方案。
1.預設關閉,不至於進入activity就開啟輸入法,影響介面美觀。
①在布局檔案中,在edittext前面放置乙個看不到的linearlayout,讓他率先獲取焦點:
android:focusable="true"
android:focusableintouchmode="true"
android:layout_width="0px"
android:layout_height="0px"/>
②方法二:先看乙個屬性android:inputtype:指定輸入法的型別,int型別,可以用|選擇多個。取值可以參考:android.text.inputtype類。取值包括:text,texturi, phone,number,等.
android sdk中有這麼一句話「if the given content type is
先將edittext的inputtype改變為type_null,輸入法就不會彈出.然後再設定監聽,再重新設定它的inputtype.
edittext.setontouchlistener(new ontouchlistener()
});2.預設彈出。有時候按照需求可能要求預設彈出輸入法。方案如下:
edittext titleinput = (edittext) findviewbyid(r.id.create_edit_title);
titleinput.setfocusable(true);titleinput.requestfocus();
onfocuschange(titleinput.isfocused());
private void onfocuschange(boolean hasfocus)
else
}}, 100);
}我覺得因為在android的主線程中對ui的操作無效,所以必須在handler中實現彈出輸入法的操作。
三。關於焦點和輸入法的個人理解
獲取焦點是獲取焦點,彈輸入法是彈輸入法。獲取焦點後並不一定會彈出輸入法,在網上搜了一圈,主流回答是「還有就是已開啟介面就是focus的text的話有可能也是不行的,ui渲染是需要時間的」......1、開啟輸入法視窗:由於對原始碼不懂,我對這一點也沒有個全面的認識。只能將焦點和輸入法分成兩塊來處理。焦點的開啟和關閉特別簡單。
焦點的獲取:
titleinput.setfocusable(true);
titleinput.requestfocus();
焦點的取消:
titleinput.setfocusable(false);
inputmethodmanager inputmethodmanager = (inputmethodmanager) getsystemservice(context.input_method_service);2、關閉出入法視窗// 接受軟鍵盤輸入的編輯文字或其它檢視
imm.showsoftinput(submitbt,inputmethodmanager.show_forced);
inputmethodmanager inputmethodmanager = (inputmethodmanager) getsystemservice(context.input_method_service);
inputmethodmanager.hidesoftinputfromwindow(opelistactivity.this.getcurrentfocus().getwindowtoken(),inputmethodmanager.hide_not_always);
//接受軟鍵盤輸入的編輯文字或其它檢視3、如果輸入法開啟則關閉,如果沒開啟則開啟 inputmethodmanager m=(inputmethodmanager) getsystemservice(context.input_method_service); m.togglesoftinput(0, inputmethodmanager.hide_not_always); 4、獲取輸入法開啟的狀態 inputmethodmanager imm = (inputmethodmanager)getsystemservice(context.input_method_service);inputmethodmanager
.showsoftinput(submitbt,inputmethodmanager.show_forced);
boolean isopen=imm.isactive();
isopen若返回true,則表示輸入法開啟
分享 EditText預設不彈出軟體鍵盤
方法一 在androidmainfest.xml中選擇哪個activity,設定windowsoftinputmode屬性為adjustunspecified statehidden 例如 方法二 讓edittext失去焦點,使用edittext的clearfocus方法 例如 edittext e...
Android如何讓EditText不彈出鍵盤
適用於需要在edittext上新增乙個popupwindow的情況 比如做乙個日期選擇器而不是手動輸入 同一頁面的edittext重寫。新增以下方法 this.setonfocuschangelistener newview.onfocuschangelistener public static v...
edittext不彈出軟鍵盤
在網上搜了一下,測試結果如下 僅供參考 android edittext不彈出軟鍵盤方法一 此方法會自動換行,但是會彈出軟鍵盤 在androidmainfest.xml中選擇哪個activity,設定windowsoftinputmode屬性為adjustunspecified statehidde...