一、效果圖:

為下花園等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及下花園網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站制作、下花園網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
二、Code:
/**
*? 1、獲取main在窗體的可視區(qū)域
*? 2、獲取main在窗體的不可視區(qū)域高度
*? 3、判斷不可視區(qū)域高度,之前根據(jù)經(jīng)驗值,在有些手機(jī)上有點(diǎn)不大準(zhǔn),現(xiàn)改成屏幕整體高度的1/3
*? ? ? 1、大于屏幕整體高度的1/3:鍵盤顯示? 獲取Scroll的窗體坐標(biāo)
*? ? ? ? ? ? ? ? ? ? ? ? ? 算出main需要滾動的高度,使scroll顯示。
*? ? ? 2、小于屏幕整體高度的1/3:鍵盤隱藏
*
* @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)用,
僅此記錄。
自定義鍵盤整個過程如下:
1.第一步,根據(jù)你的需求,需要定制怎樣的鍵盤,需要幾行幾列,準(zhǔn)備好鍵盤按鍵的背景圖片,鍵盤的尺寸,在res文件下,新建一個xml文件,下面放字母、數(shù)字、標(biāo)點(diǎn)符號鍵盤的布局文件,我的需求是這樣的:
可以看到上述的鍵盤需要美工做的圖片有幾張:字母和數(shù)字的按鍵的基本背景(需要圓角)、刪除按鍵、切換大小寫的圖標(biāo)、點(diǎn)擊隱藏鍵盤的下拉按鍵,設(shè)置鍵盤的布局為白色就可以大致實現(xiàn)上述的效果。這里我在寫鍵盤文件的時候遇到幾個難點(diǎn),分享如下:
A.按鍵之間的空隙和鍵盤整體高度,需要不斷的調(diào)整,不可能一下子就可以布置好的,特別字母鍵盤里的刪除鍵,高度是兩個按鍵,所以需要反復(fù)調(diào)試。
B.為了解決點(diǎn)擊下拉按鈕隱藏鍵盤的功能:放棄原先點(diǎn)擊下拉按鈕,隱藏整個鍵盤的布局的方案,而改用在鍵盤文件中再加一整行,只有一個按鍵,就是done,完成按鈕,這是系統(tǒng)定義好的完成功能,code值為:??-3。(所以我們發(fā)現(xiàn)很多系統(tǒng)自動的比如切換大小寫、刪除功能、空格功能,都是已經(jīng)定義好了code值,只需要找到對應(yīng)的含義,直接定義使用就可以了。)
軟鍵盤其實是一個Dialog
InputMethodService為我們的輸入法創(chuàng)建了一個Dialog,并且對某些參數(shù)進(jìn)行了設(shè)置,使之能夠在底部或者全屏顯示。當(dāng)我們點(diǎn)擊輸入框時,系統(tǒng)會對當(dāng)前的主窗口進(jìn)行調(diào)整,以便留出相應(yīng)的空間來顯示該Dialog在底部,或者全屏。
其實這段話我們經(jīng)常在各種軟鍵盤博客所看到,但是大家并不知道Android是怎么為我們創(chuàng)建的這個Dialog,所以我先帶大家來看下軟鍵盤生成這塊的源碼,了解軟鍵盤的生成流程。
我們先來看一下InputMethodService的繼承關(guān)系:
因為InputMethodService屬于服務(wù),接下來我們先看一下服務(wù)的入口onCreate()方法:
通過上面的分析,我們懷疑這里的SoftInputWindow是軟鍵盤彈出創(chuàng)建的Dialog對象,下面我們看下SoftInputWindow的源碼。
看到這里大家就能明白了,為什么說軟鍵盤就是一個Dialog。而且這里通過設(shè)置Gravity.BOTTOM來控制當(dāng)前Dialog在Window中的位置。
在Android中,可以通過給Activity設(shè)置 windowSoftInputMode 這個屬性來控制軟鍵盤與Activity的主窗口的交互方式。
Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式,該屬性的設(shè)置影響兩個方面:
該設(shè)置必須是下面所列的值之一,或者是一個“state…”值加上一個“adjust…”值的組合,在任一組中設(shè)置多個值(例如,多個“state…”值)都會產(chǎn)生未定義結(jié)果。各值之間使用垂直條 (|) 分隔。
下面將通過例子來介紹 adjustNoting 、 adjustUnspecified 、 adjustResize 、 adjustPan 在軟鍵盤彈出的區(qū)別:
非滾動布局xml
點(diǎn)擊最下面的EditText12
滾動布局xml
通過上面的例子,我們可以完全理解adjust系列的各個參數(shù)的作用。而軟鍵盤的顯示和隱藏這里面需要并不多,而且內(nèi)容并不算復(fù)雜,大家回去自己嘗試下就可以。
在日常開發(fā)中,如果需要將軟鍵盤的Enter鍵更改為其他鍵,可以設(shè)置其 android:imeOptions 屬性,這個屬性可以控制軟鍵盤的Enter鍵,以及橫屏情況下的軟鍵盤顯示狀態(tài)。
該設(shè)置必須是下面所列的值之一,或者是一個“action…”值加上一個“flag…”值的組合,在action…組中設(shè)置多個值(例如,多個“action…”值)都會產(chǎn)生未定義結(jié)果,而flag….可以設(shè)置多個。各值之間使用垂直條 (|) 分隔
控制軟鍵盤上的Enter鍵
橫屏下控制軟鍵盤
總結(jié)一下:
這里大部分的屬性,已經(jīng)介紹完畢,如果英語好的同學(xué),可以去看下官方文檔,可以更好的理解,并且本文以搜狗輸入法為實踐,可能其他的輸入法與其顯示的不同,但是功能應(yīng)該都是一樣的。
而如果要在橫屏狀態(tài)不希望軟鍵盤全屏顯示最好是將flagNoFullscreen和flagNoExtractUi結(jié)合使用,這樣體驗上會更好
android:imeOptions=”flagNoFullscreen|flagNoExtractUi”
Android官網(wǎng)的Api
如果需要監(jiān)聽軟鍵盤的右下角的按鍵,需要為EditText設(shè)置setOnEditorActionListener()監(jiān)聽:
上面的方式,只是展示了如何監(jiān)聽各個按鍵的方法,如果需要消費(fèi)事件,則需要return true。
(1)第一次寫這么長的博客,感覺會有一些不足,各位看官如果有不合理的地方,或者有誤的地方請直接指出。
(2)本來想整理成一個Demo的,后來簡單看來下,該有的幾乎都貼出來了,有需要的可以按需復(fù)制就可以。
(3)寫完這篇博客之后,感覺博客干貨還是不多,所以定位這篇文章算是總結(jié)性質(zhì)加上實際案例性質(zhì)的博客。
(4)Android軟鍵盤的總結(jié)就差不多到這里,希望各位看官,如果看到這里有收獲,就點(diǎn)點(diǎn)贊,灌灌水,頂一波,這樣博主才有寫下去的動力。
(5)感謝小輝同學(xué)的校驗,調(diào)整了文章中不通順的地方。
1.徹底搞定Android開發(fā)中軟鍵盤的常見問題
2.Android UI(EditText)詳解
;fps=1
3.微信軟鍵盤布局閃動問題
長按 輸入框 ,彈出不同鍵盤類型。
如果默認(rèn)的原始軟鍵盤,不想用
去軟件市場里下載,如 搜狗鍵盤。百度鍵盤。QQ鍵盤
安裝完畢后,點(diǎn)擊輸入框,長按。彈出以上下載的軟件鍵盤。
進(jìn)行選擇。
一般來說aosp自帶輸入法只支持英文且是26鍵布局。
但android可以自己換輸入法(不需要root什么的,不像蘋果一樣還需要越獄),百度搜狗什么的,9鍵,14鍵,26鍵還有各種布局都有
效果圖:
布局文件:
添加?android:fitsSystemWindows="true"
注冊清單:
整個布局都頂上去
AndroidManifest.xml 添加 android:windowSoftInputMode="adjustResize|stateHidden"
只把輸入框頂上去
AndroidManifest.xml 添加 android:windowSoftInputMode="stateHidden|adjustPan"
分享標(biāo)題:android鍵盤布局,android鍵盤布局設(shè)置
鏈接分享:http://chinadenli.net/article21/dsshojd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作、微信公眾號、建站公司、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)