EditText 預設不彈鍵盤 焦點

2022-04-10 10:39:06 字數 2852 閱讀 1816

今天程式設計碰到了乙個問題:有一款平板,開啟乙個有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渲染是需要時間的」......

由於對原始碼不懂,我對這一點也沒有個全面的認識。只能將焦點和輸入法分成兩塊來處理。焦點的開啟和關閉特別簡單。

焦點的獲取:

titleinput.setfocusable(true);

titleinput.requestfocus();

焦點的取消:

titleinput.setfocusable(false);

1、開啟輸入法視窗:

inputmethodmanager inputmethodmanager = (inputmethodmanager)               getsystemservice(context.input_method_service);

// 接受軟鍵盤輸入的編輯文字或其它檢視

imm.showsoftinput(submitbt,inputmethodmanager.show_forced);

2、關閉出入法視窗

inputmethodmanager inputmethodmanager = (inputmethodmanager)               getsystemservice(context.input_method_service);

inputmethodmanager.hidesoftinputfromwindow(opelistactivity.this.getcurrentfocus().getwindowtoken(),

inputmethodmanager.hide_not_always);

//接受軟鍵盤輸入的編輯文字或其它檢視

inputmethodmanager

.showsoftinput(submitbt,inputmethodmanager.show_forced);

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);

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...