android 自動 鍵盤,關于Android中的軟鍵盤

InputMethodService為我們的輸入法創建了一個Dialog,并且將該Dialog的Window的某些參數(如Gravity)進行了設置,使之能夠在底部或者全屏顯示。當我們點擊輸入框時,系統對活動主窗口進行調整,從而為輸入法騰出相應的空間,然后將該Dialog顯示在底部,或者全屏顯示。

軟鍵盤顯示的調整

Android定義了一個屬性,名字為windowSoftInputMode, 這個屬性用于設置Activity主窗口與軟鍵盤的交互模式,用于避免軟鍵盤遮擋內容的問題。我們可以在AndroidManifet.xml中對Activity進行設置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。 該屬性可選的值有兩部分,一部分為軟鍵盤的狀態控制,控制軟鍵盤是隱藏還是顯示,另一部分是Activity窗口的調整,以便騰出空間展示軟鍵盤。 android:windowSoftInputMode的屬性設置必須是下面中的一個值,或一個”state”值加一個”adjust”值的組合,各個值之間用 | 分開。

stateUnspecified-未指定狀態:當我們沒有設置android:windowSoftInputMode屬性的時候,軟件默認采用的就是這種交互方式,系統會根據界面采取相應的軟鍵盤的顯示模式。

stateUnchanged-不改變狀態:當前界面的軟鍵盤狀態,取決于上一個界面的軟鍵盤狀態,無論是隱藏還是顯示。

stateHidden-隱藏狀態:當設置該狀態時,軟鍵盤總是被隱藏,不管是否有輸入的需求。

stateAlwaysHidden-總是隱藏狀態:當設置該狀態時,軟鍵盤總是被隱藏,和stateHidden不同的是,當我們跳轉到下個界面,如果下個頁面的軟鍵盤是顯示的,而我們再次回來的時候,軟鍵盤就會隱藏起來。

stateVisible-可見狀態:當設置為這個狀態時,軟鍵盤總是可見的,即使在界面上沒有輸入框的情況下也可以強制彈出來出來。

stateAlwaysVisible-總是顯示狀態:當設置為這個狀態時,軟鍵盤總是可見的,和stateVisible不同的是,當我們跳轉到下個界面,如果下個頁面軟鍵盤是隱藏的,而我們再次回來的時候,軟鍵盤就會顯示出來。

adjustUnspecified-未指定模式:設置軟鍵盤與軟件的顯示內容之間的顯示關系。當你跟我們沒有設置這個值的時候,這個選項也是默認的設置模式。在這中情況下,系統會根據界面選擇不同的模式。

adjustResize-調整模式:該模式下窗口總是調整屏幕的大小用以保證軟鍵盤的顯示空間;這個選項不能和adjustPan同時使用,如果這兩個屬性都沒有被設置,系統會根據窗口中的布局自動選擇其中一個。

adjustPan-默認模式:該模式下通過不會調整來保證軟鍵盤的空間,而是采取了另外一種策略,系統會通過布局的移動,來保證用戶要進行輸入的輸入框肯定在用戶的視野范圍里面,從而讓用戶可以看到自己輸入的內容。

案例

沒有滾動布局xml

對于沒有滾動控件的布局來說,adjustPan就是默認的設置,比如我們案例應用中的文本輸入8,上面的文本輸入框123和按鈕都會被頂上去,且頁面布局不可以滾動。

對于沒有滾動控件的布局來說,整個布局會網上偏移(包括標題等)以保證輸入框的可見。如果有滾動控件,那么就是內容網上偏移,標題不會動,還可以通關滾動來查看被頂上去的內容,而這點是不可滾動的布局所不具備的

50c35e1bf09b

沒有滾動的布局

有滾動布局xml

對于有滾動控件的布局,則是采用的adjustResize方式,比如我們案例應用中的文本輸入8,上面的文本輸入框123和按鈕都會被頂上去,可以通過滾動來查看被頂上去的內容。

** 根據這一原理,我們就可以把開發中遇到的軟鍵盤遮擋頁面的問題,利用ScrollView當做根布局,讓系統采用adjustResize模式,很好地解決這一問題。**

自動彈出軟鍵盤

有時候需要一進入Activity后就自動彈出軟鍵盤,可以通過設置一個時間函數來實現,具體寫法如下:

方法一:

Timer timer=new Timer();

timer.schedule(new TimerTask() {

public void run() {

InputMethodManager inputMethodManager= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

} }, 1000); // 秒后自動彈出

方法二:

Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

InputMethodManager inputManager =(InputMethodManager) etInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

inputManager.showSoftInput(etInput, 0);

}},1000);// 1秒后自動彈出

不自動彈出軟鍵盤

有時進入Activity后不希望系統自動彈出軟鍵盤,我們可以按照下面的方法來實現:

方法一:

在AndroidMainfest.xml中選擇那個activity,設置windowSoftInputMode屬性為adjustUnspecified|stateHidden

Android:label="@string/app_name"

Android:windowSoftInputMode="adjustUnspecified|stateHidden"

Android:configChanges="orientation|keyboardHidden">

方法二:

讓EditText失去焦點,使用EditText的clearFocus方法

EditText edit=(EditText)findViewById(R.id.edit);

edit.clearFocus();

方法三:

強制隱藏Android輸入法窗口

EditText edit=(EditText)findViewById(R.id.edit);

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

方法四:

EditText始終不彈出軟件鍵盤

EditText edit=(EditText)findViewById(R.id.edit);

edit.setInputType(InputType.TYPE_NULL);

EditText設置ScrollView壓縮背景圖片解決辦法

在你的Activity里加上

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

動態關閉軟鍵盤

有時希望根據條件動態關閉軟鍵盤,我們可以使用InputMethodManager類,按照下面的方法來實現:

方法一:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //得到InputMethodManager的實例

if (imm.isActive()) {//如果開啟

//關閉軟鍵盤,開啟方法相同,這個方法是切換開啟與關閉狀態的

imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);

}

//這個方法實際是軟鍵盤的開關方法,調用一次打開軟鍵盤再調用一次關閉軟鍵盤,實際上可能并沒有那么使用

方法二:

強制隱藏軟鍵盤,這個方法倒是很實用。

public void KeyBoardCancle() {

View view = getWindow().peekDecorView();

if (view != null) {

InputMethodManager inputmanger = (InputMethodManager) getSystemService(ActivityBase.INPUT_METHOD_SERVICE);

inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);

} }

方法三:

int flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;

getWindow().addFlags(flags);

方法四:

在onclick事件下.以下方法可行.(如果是EditText失去焦點/得到焦點,沒有效果)

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

軟鍵盤界面按鈕功能設置方法

使用android:imeOptinos可對Android自帶的軟鍵盤進行一些界面上的設置:

android:imeOptions="flagNoExtractUi"/>

android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只占用一部分屏幕

同時,這個屬性還能控件軟鍵盤右下角按鍵的顯示內容,默認情況下為回車鍵

android:imeOptions="actionNone" //輸入框右側不帶任何提示 android:imeOptions="actionGo" //右下角按鍵內容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片,搜索 android:imeOptions="actionSend" //右下角按鍵內容為'發送' android:imeOptions="actionNext" //右下角按鍵內容為'下一步' android:imeOptions="actionDone" //右下角按鍵內容為'完成'

50c35e1bf09b

這里寫圖片描述

50c35e1bf09b

這里寫圖片描述

同時,可能EditText添加相應的監聽器,捕捉用戶點擊了軟鍵盤右下角按鈕的監聽事件,以便進行處理。

editText.setOnEditorActionListener(new OnEditorActionListener() {

@Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

Toast.makeText(MainActivity.this, "響應了配置后的按鍵", Toast.LENGTH_SHORT).show(); return false;

}

});

踩過的坑

一、軟鍵盤無法頂起頁面

開發中有個需求是將頁面底部的一個按鈕頂起,但是開發時發現Android5.0以后的版本設置了adjustResize屬性后無法成功頂起。糾結了好久,最后在stackoverflow找到解決方案,那就是在根布局上加上fitsSystemWindow=”true”即可。

50c35e1bf09b

這里寫圖片描述

這里的fitsSystemWindow具體的作用就是你的**contentview是否忽略actionbar,title,屏幕的底部虛擬按鍵,將整個屏幕當作可用的空間。 **

正常情況,contentview可用的空間是去除了actionbar,title,底部按鍵的空間后剩余的可用區域;這個屬性設置為true,則忽略,false則不忽略

二、自定義軟鍵盤按鈕功能無效

在edittext上加入Android:imeOptions=”actionSearch”這個屬性沒響應,最后發現在2.3及以上版本不起作用,解決方案:加上

android:singleLine="true"

因為輸入法鍵盤右下角默認的回車鍵本來就是換行用的,當設置單行后,回車換行就失去作用了,這樣就可以設置為搜索、發送、go等等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529323.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android渠道包自動發布市場,Android Gradle實現打包指定渠道后自動上傳到fir

fir分三個主要步驟1.獲取fir上傳憑證2.上傳APKAPP logo圖標3.獲取最新的下載地址供別人下載注:python使用的是requests網絡請求庫1.獲取fir上傳憑證image.png代碼如下:# 第一步:獲取fir上傳憑證print("get fir upload certificate"…

android studio vfs,Android Studio:嘗試呈現XML布局的InvalidVirtualFileAccessException

我正在嘗試在我的應用中預覽xml布局(任何xml布局).我正在使用Android Studio 1.5 Preview 2.我一遍又一遍地收到此錯誤:InvalidVirtualFileAccessException:訪問無效的虛擬文件:file:// D:/Scott/Android/Studio/MyApp/app/build/intermediates/classes/debug/com/scott/myapp/…

android 基類fragment,Android DialogFragment 基類的定制

鴻洋博客介紹:DialogFragment的基本使用好處:1:使用DialogFragment來管理對話框,當旋轉屏幕和按下后退鍵時可以更好的管理其聲明周期,它和Fragment有著基本一致的生命周期2.DialogFragment也允許開發者把Dialog作為內嵌…

升級鴻蒙系統無法選擇應用,申請鴻蒙系統有一個應用選擇怎么選擇呢

[分享交流]申請鴻蒙系統有一個應用選擇怎么選擇呢34364電梯直達huafen774590890新學乍練發表于 2020-12-18 22:19:17來自:HUAWEI Mate 30 Pro 5G最新回復 2020-12-19 09:31:55要怎么選擇大家知道嗎?想著你的狼自成一派發表于 2020-12-18 22:22:29來自&am…

html5 網頁游戲論文,JavaScript編寫的網頁小游戲,很給力

以下為游戲代碼:var timerID null;var INT 40;var loadFLG 0;var gameFLG 0;var missFLG 0;var tim 0;var blcol new Array(5); // block colorvar blsta new Array(40); // block statusvar blNO new Array(40); // block Novar blclr 0; // clear block…

c 插件讀取有屬性的html6,廖雪峰的JS教程6-jQuery

jQueryjQuery是JavaScript世界中使用最廣泛的一個庫。jQuery這么流行,肯定是因為它解決了一些很重要的問題。實際上,jQuery能幫我們干這些事情:消除瀏覽器差異:你不需要自己寫冗長的代碼來針對不同的瀏覽器來綁定事件,…

html5中的css特性,淺談HTML5 CSS3的新交互特性

本文標題的這副圖片,是用phosotshop制作的。但是,在搜索引擎中你卻無法搜索到它,搜索引擎還沒有強大到能夠識別圖片里面的文字。并且由于圖片的體積不算太小,可能網速慢的網友在瀏覽的時候不得不耐心的等待圖片的刷新。那么&#…

html表格通過郵件發送,通過html表格發電子郵件

[email protected]>Create this tableThe field "what" is for different categoriesCREATE TABLE email_notify (ID int(11) DEFAULT ‘0‘ NOT NULL,What varchar(60) DEFAULT ‘0‘ NOT NULL,Name varchar(60) DEFAULT ‘0‘ NOT NULL,Email varchar(60) DEFAU…

計算機專業知識多選題證監會,2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱...

2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱由國家公務員考試網公告解讀欄目由提供,更多關于2019國家公務員考試大綱,計算機類國考考試大綱,證監會國考考試大,國家公務員考試公告解讀的內容,請關注國家公務員考試網/廣東公務員考試網&…

計算機和網絡老是斷開,電腦插上網線還是顯示斷開連接怎么辦

在網絡故障處理中遇到過千奇百怪的問題,這里就說一個比較怪異的問題。一個網線插口,有的電腦插上網線可以正常上網,而有的電腦插上就顯示斷開連接。試了好多辦法,換了網線,換了插口,換了路由器,…

計量經濟學第六版計算機答案,伍德里奇計量經濟學導論計算機習題第六章第13題c_6.13...

伍德里奇計量經濟學導論計算機習題第六章第13題,答案和MATLAB代碼clear,clc;% c6.13 by% 打開文字文件和數據文件importdata(meap00_01.des);dataxlsread(meap00_01);% 檢驗所用數據是否為非空Isnanisnan(data(:,[3,5,8,9]));asum(Isnan);bfind(a0);data1data(b,:);% 變量命名m…

思品課如何使用計算機教學課件,小學思品獲獎論文巧用多媒體,優化思品課堂教學...

小學思品獲獎論文巧用多媒體,優化思品課堂教學摘要:信息技術輔助課堂教學,有利于促進思想品德課教學內容呈現方式、教師教學方式、學生學習方式和師生互動方式的變革。利用信息技術能提高學生學習思想品德的興趣;有利于培養學生的…

計算機網絡的資源共享功能包,計算機網絡的資源共享功能包括

資源共享是現代計算機網絡的最主要的作用,它包括軟件共享、硬件共享及數據共享。在網絡中,多臺計算機或同一計算機中的多個用戶,同時使用硬件和軟件資源。通常多用戶同時需要的資源總是超過系統實際物理資源的數量,但采用邏輯(或虛…

《計算機應用基礎》期末試卷.,《計算機應用基礎》期末試卷(A卷)《計算機應用基礎》期末試卷(A卷).doc...

廣東外語藝術職業學院成人高等教育2012學年第 一 學期 三年 制2012級 初等教育專業計算機應用基礎課程 期末 考試試題試卷類型:A 考試形式:閉卷本試題共 五 大題, 4 頁,滿分 100 分,考試時間為 120 分鐘,答…

計算機學院嘉年華標題,“芯動盛夏 AI創南航” 計算機學院舉辦第八屆計算機嘉年華...

當前,我們正迎來一個科技主導的全智能時代,為激發大家學習探索人工智能的興趣,切身感受AI科技的魅力所在,計算機科學與技術學院/人工智能學院于6月20日在體育館廣場舉辦了“芯動盛夏 AI創南航”第八屆計算機嘉年華活動。活動中&am…

計算機網絡與通信02339,4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx...

4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx精品自學考試資料推薦全國 2018 年 4 月高等教育自學考試計算機網絡與通信試題課程代碼 02339一、單項選擇題本大題共 15 小題,每小題1 分,共 15 分 在每小題列出的四個備選項中只有一個是符…

計算機考研百天,2015考研計算機專業復習百天周計劃

計算機百天沖刺周計劃學習目標篇百天計劃第一周(9月26日—10月6日)1.完成數據結構中線性表的復習;并配以習題鞏固練習。2.完成強化課程數據結構第一章的學習,重難點針對復習。3.完成數據結構中棧,隊列和數組的復習; 并配以習題鞏固練習。4.完成強化課程數…

愛爾蘭都柏林圣三一大學計算機排名,2021年愛爾蘭都柏林圣三一大學世界及專業排名 不愧是最古老的學府!...

它是參照牛津和劍橋大學模式興建的歐索世界頂級研究型大學,其商學院也是歐洲培養企業家最多的商學院之一,這所名校就是愛爾蘭都柏林圣三一大學,該校的科研實力雄厚,因此,每年都會吸引一大批的學子前往該校留學&#xf…

計算機系統的四種啟動方式是,電腦啟動方式有幾種你知道嗎?

關于電腦啟動方式有幾種,可能你會說,電腦啟動不就是按電源按鈕啟動嗎?實際上,電腦有三種啟動方式,而且三種啟動方式會對應不一樣情況,雖然有些概念對現在的電腦略微有一點點落后,但是對于玩電腦…

安裝殺毒軟件是保障計算機安全,安裝殺毒軟件是保障計算機安全的唯一措施

摘要:脈搏8次/分,安裝安全合的最適此時方式手術是,血壓病人術時。軟件綜合征在最常見的青春前期表現臨床是。障計糖病粘多目前據是確診的依。...脈搏8次/分,安裝安全合的最適此時方式手術是,血壓病人術時。殺毒保算機施…