重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
Android軟鍵盤強制彈出及隱藏輸入法的方法:
為企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營銷推廣、競價托管、品牌運營等營銷獲客服務(wù)。創(chuàng)新互聯(lián)建站擁有網(wǎng)絡(luò)營銷運營團隊,以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認可!
很多應(yīng)用中對于一個界面比如進入搜索界面或者修改信息等等情況,為了用戶體驗應(yīng)該自動彈出軟鍵盤而不是讓用戶主動點擊輸入框才彈出(因為用戶進入該界面必然是為了更改信息)。具體實現(xiàn)這種效果的代碼如下:
java代碼
EditText editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();
InputMethodManager inputManager =
(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(editText, 0);
首先要對指定的輸入框請求焦點。然后調(diào)用輸入管理器彈出軟鍵盤。
警告:對于剛跳到一個新的界面就要彈出軟鍵盤的情況上述代碼可能由于界面為加載完全而無法彈出軟鍵盤。此時應(yīng)該適當(dāng)?shù)难舆t彈出軟鍵盤如998毫秒(保證界面的數(shù)據(jù)加載完成)。實例代碼如下:
java代碼:
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
public void run()
{
InputMethodManager inputManager =
(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(editText, 0);
}
},
998);
[img]基于Android9.x
Window和Session創(chuàng)建成功后,窗口的下一步流程為獲取焦點
我們看下焦點獲取過程,跟輸入法相關(guān)的流程
兩個Activity切換時,對應(yīng)的狀態(tài)變化過程為:
以下是Activity窗口初次獲取焦點的流程
當(dāng)兩個activity 切換時,失去焦點的窗口調(diào)用過程如下:
對應(yīng)的,獲取焦點的額窗口的調(diào)用過程如下:
當(dāng)B窗口的狀態(tài)切換到RESUMED時,當(dāng)窗口的focus可能變化時,會調(diào)用updateFocusedWindowLocked
在該方法中,判斷,如果還沒有執(zhí)行startInputInner方法,則執(zhí)行startInputInner方法,否則,直接執(zhí)行startInputOrWindowGainedFocus方法
主要流程:
1:設(shè)置controlFlags的flag為CONTROL_WINDOW_FIRST
2:檢查是否已經(jīng)執(zhí)行過startInputInner,沒有的話執(zhí)行startInputInner--startInputOrWindowGainedFocus;否則,直接執(zhí)行startInputOrWindowGainedFocus
兩條路徑,攜帶的startInputReason參數(shù)不一樣
主要流程:
1:檢查要啟動和退出的ServedView是否為同一個,如果為同一個,則表示已經(jīng)執(zhí)行過startInputInner,則返回false,表示不再執(zhí)行startInputInner
2:如果獲取焦點的是EditorText,會創(chuàng)建跟IMS通信的mServedInputConnectionWrapper對象
主要流程:
1:創(chuàng)建EditorInfo對象tba,這個參數(shù)對TextView布局才有意義,它的初始化是在mServedView的onCreateInputConnection完成實例化的
2:根據(jù)EditorInfo創(chuàng)建一個InputConnection對象,輸入法應(yīng)用通過該對象,完成輸入內(nèi)容到輸入框的傳遞;ACTIVITY獲取焦點場景,該對象
為null,因為沒有要輸入的對象
startInputOrWindowGainedFocus攜帶的參數(shù)
startInputReason = 1
表示,該流程是窗口獲取焦點過程
mClient
應(yīng)用層創(chuàng)建的IInputMethodClient對象,為服務(wù)層提供應(yīng)用層的各個回調(diào)方法
該方法跟應(yīng)用進程首次創(chuàng)建時Session時,傳遞到IMMS的對象是同一個對象
windowGainingFocus:
應(yīng)用層的ViewRootImpl$W對象
controlFlags |= CONTROL_START_INITIAL;
表示window窗口剛開始獲取焦點
softInputMode = SOFT_INPUT_ADJUST_RESIZE , 允許調(diào)整輸入法窗口,避免被其他窗口遮擋
tba , EditorInfo對象
servedContext
null
missingMethodFlags
ic等于null的情況下,為0
當(dāng)應(yīng)用層傳遞的W對象windowToken不為null的時候,則創(chuàng)建windowGainedFocus對象,返回給app
結(jié)果返回后,會對IMM的對象進行賦值
如此,進入一個窗口,獲取窗口焦點過程,窗口與輸入法相關(guān)的流程,就結(jié)束了。
下一篇:輸入法在輸入框彈出流程
Android輸入法(3),彈出流程
若使用的是vivo手機,可以進入設(shè)置--系統(tǒng)管理/更多設(shè)置--輸入法--默認輸入法--切換至想要設(shè)置的輸入法即可。
Android手機可以安裝多個輸入法,并且方便的進行切換,這樣可以適合各自的使用。
具體的安裝和切換方法為:
1.首先下載安裝包,然后解壓后存放在內(nèi)存卡中,然后點擊安裝。
2.安裝完成后,我們在桌面按menu鍵,選擇settings(設(shè)置)-LocaleText(區(qū)域和文本),這里有設(shè)置選項,根據(jù)自己的需要進行選擇。
3.打開短信,在輸入時按住輸入框,會彈出選擇輸入法的對話框。
這樣就可以很方便的對Android手機輸入法進行切換了,目前使用較多的就是谷歌輸入法和HTC輸入法。
安卓手機先設(shè)置里對自己想用的輸入法打鉤,再在輸入的地方長按住屏幕不放。即可。ok
參考:百度資料