原因是因?yàn)楫?dāng)界面初始化的時(shí)候可能EditText并沒(méi)有初始化完成,就要求顯示軟鍵盤(pán)了。

成都創(chuàng)新互聯(lián)公司專(zhuān)注于泊頭企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都做商城網(wǎng)站。泊頭網(wǎng)站建設(shè)公司,為泊頭等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
在包含EditText外層布局上添加,搶在EditText獲取焦點(diǎn),即可。
正常情況下,只要寫(xiě)了EditText控件,當(dāng)進(jìn)入Activity時(shí),是會(huì)直接顯示軟鍵盤(pán)的,但是如果我們的EditText是GONE或者INVISIBLE的話,當(dāng)我們點(diǎn)擊其他控件,然后讓Edittext顯示,并且彈出軟鍵盤(pán),那么這個(gè)時(shí)候就必須關(guān)注順序的問(wèn)題,必須必須先讓EditText顯示,在調(diào)用顯示軟鍵盤(pán)的代碼才可以,如果先讓軟鍵盤(pán)彈出再讓EditText顯示,這個(gè)時(shí)候軟鍵盤(pán)是彈不出來(lái)的。
Android軟鍵盤(pán)強(qiáng)制彈出及隱藏輸入法的方法:
很多應(yīng)用中對(duì)于一個(gè)界面比如進(jìn)入搜索界面或者修改信息等等情況,為了用戶(hù)體驗(yàn)應(yīng)該自動(dòng)彈出軟鍵盤(pán)而不是讓用戶(hù)主動(dòng)點(diǎn)擊輸入框才彈出(因?yàn)橛脩?hù)進(jìn)入該界面必然是為了更改信息)。具體實(shí)現(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);
首先要對(duì)指定的輸入框請(qǐng)求焦點(diǎn)。然后調(diào)用輸入管理器彈出軟鍵盤(pán)。
警告:對(duì)于剛跳到一個(gè)新的界面就要彈出軟鍵盤(pán)的情況上述代碼可能由于界面為加載完全而無(wú)法彈出軟鍵盤(pán)。此時(shí)應(yīng)該適當(dāng)?shù)难舆t彈出軟鍵盤(pán)如998毫秒(保證界面的數(shù)據(jù)加載完成)。實(shí)例代碼如下:
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);
1、首先,在xml文件中通過(guò)讓edittext獲取焦點(diǎn)
EditText
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? android:padding="17dp"
? ? android:textColor="#333333"
? ? android:textColorHint="#999999"
? ? android:hint="請(qǐng)輸入課件描述..."
? ? android:gravity="top|left"
? ? android:background="@null"
? ?
? ? requestFocus/
/EditText
2、在清單文件中給activity添加android:windowSoftInputMode=”stateVisible”屬性,這樣一進(jìn)入這個(gè)頁(yè)面的時(shí)候光標(biāo)就自動(dòng)顯示,軟鍵盤(pán)也顯示出來(lái)
activity
? ? ? ? android:name=".wonderfulmoment.AddCourseWareDescriptionActivity"
? ? ? ? android:windowSoftInputMode="stateVisible"/activity
一、效果圖:
二、Code:
/**
*? 1、獲取main在窗體的可視區(qū)域
*? 2、獲取main在窗體的不可視區(qū)域高度
*? 3、判斷不可視區(qū)域高度,之前根據(jù)經(jīng)驗(yàn)值,在有些手機(jī)上有點(diǎn)不大準(zhǔn),現(xiàn)改成屏幕整體高度的1/3
*? ? ? 1、大于屏幕整體高度的1/3:鍵盤(pán)顯示? 獲取Scroll的窗體坐標(biāo)
*? ? ? ? ? ? ? ? ? ? ? ? ? 算出main需要滾動(dòng)的高度,使scroll顯示。
*? ? ? 2、小于屏幕整體高度的1/3:鍵盤(pán)隱藏
*
* @param main 根布局?
* @param scroll 需要顯示的最下方View
*/
public static void addLayoutListener(final View main, final View scroll) {
main.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
? ? @Override
? ? public void onGlobalLayout() {
? ? ? ? Rect rect = new Rect();
? ? ? ? main.getWindowVisibleDisplayFrame(rect);
? ? ? ? int screenHeight = main.getRootView().getHeight();
? ? ? ? int mainInvisibleHeight = main.getRootView().getHeight() - rect.bottom;
? ? ? ? if (mainInvisibleHeight screenHeight / 4) {
? ? ? ? ? ? int[] location = new int[2];
? ? ? ? ? ? scroll.getLocationInWindow(location);
? ? ? ? ? ? int srollHeight = (location[1] + scroll.getHeight()) - rect.bottom;
? ? ? ? ? ? main.scrollTo(0, srollHeight);
? ? ? ? } else {
? ? ? ? ? ? main.scrollTo(0, 0);
}
}
});
}
三、調(diào)用方式:
在Activity的onCreate()中調(diào)用,
僅此記錄。
可以通過(guò)下面的代碼來(lái)實(shí)現(xiàn)Android自動(dòng)彈出軟鍵盤(pán):
edittext.requestFocus(); //edittext是一個(gè)EditText控件
Timer timer = new Timer(); //設(shè)置定時(shí)器
timer.schedule(new TimerTask() {
@Override
public void run() { //彈出軟鍵盤(pán)的代碼
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edittext, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}, 300); //設(shè)置300毫秒的時(shí)長(zhǎng)
說(shuō)明:同樣是在寫(xiě)Techo Lite時(shí)遇到的問(wèn)題。希望程序可以自動(dòng)彈出軟鍵盤(pán),可是嘗試了各種辦法都沒(méi)有效果。問(wèn)題的原因似乎是必須等待UI繪制完成后彈出軟鍵盤(pán)的代碼才會(huì)有效。于是就采用了上面的方法。需要注意的是,在此之前必須讓edittext獲取焦點(diǎn),不然也是無(wú)效的。
這個(gè)問(wèn)題看似簡(jiǎn)單,不過(guò)由于Android輸入法的開(kāi)放性,許多輸入法相關(guān)的參數(shù)設(shè)置是由第三方輸入法來(lái)實(shí)現(xiàn)的,而第三方輸入法眾多、實(shí)現(xiàn)不一,導(dǎo)致這個(gè)問(wèn)題變得很復(fù)雜。
結(jié)論是,目前來(lái)看,并沒(méi)有直接的方法,可以對(duì)所有輸入法實(shí)現(xiàn)上述需求。
不過(guò)針對(duì)這個(gè)問(wèn)題,我們有以下幾種處理方案:
設(shè)置android:digits屬性,允許輸入數(shù)字和字母。
設(shè)置android:inputType為"number",將鍵盤(pán)切換為數(shù)字鍵盤(pán)。
這里的關(guān)鍵是,雖然單獨(dú)設(shè)置android:inputType="number"時(shí),只允許輸入數(shù)字;但同時(shí)設(shè)置android:inputType和android:digits時(shí),允許輸入的字符是以android:digits為準(zhǔn)的。
當(dāng)輸入法本身的UI允許在數(shù)字鍵盤(pán)、字母鍵盤(pán)間切換時(shí),該方案是有效的;但是一些輸入法的數(shù)字鍵盤(pán)不能切換到字母鍵盤(pán),該方案失效;特別是,Android5.0的原生輸入法就是如此,數(shù)字鍵盤(pán)UI沒(méi)有提供切換到其他鍵盤(pán)的按鈕。
雖然該方案對(duì)一些輸入法(尤其是英文輸入法)無(wú)效,但是中文輸入法基本都是有效的。如果APP僅在國(guó)內(nèi)用的,這個(gè)方案夠用了
方案一失效的主要原因是,輸入法界面中沒(méi)有提供切換鍵盤(pán)的按鍵,所以我們可以自己添上按鍵。
帶來(lái)的問(wèn)題是,自己添加按鍵,很難與輸入法保持統(tǒng)一的UI風(fēng)格;而當(dāng)輸入法本身有鍵盤(pán)切換按鍵時(shí),這個(gè)方案是畫(huà)蛇添足,既怪異又不美觀。 所以這個(gè)方案在UI上有嚴(yán)重缺陷,并不實(shí)用。
效果圖如下:
Activity如下:
activity_main.xml如下:
自定義鍵盤(pán)可以徹底解決問(wèn)題,是最完美的方案;但是復(fù)雜度有點(diǎn)高。
默認(rèn)彈出數(shù)字鍵盤(pán)真的有那么重要么?沒(méi)有的話,干脆不要折騰了,StackOverflow上那么多人已經(jīng)證明這個(gè)問(wèn)題無(wú)完美解了。
分享標(biāo)題:android彈出鍵盤(pán),安卓彈出鍵盤(pán)
鏈接URL:http://chinadenli.net/article42/dsiephc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、小程序開(kāi)發(fā)、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)