當前位置:首頁 » 安卓系統 » android獲取軟鍵盤

android獲取軟鍵盤

發布時間: 2023-01-25 09:42:43

Ⅰ 關於Android中的軟鍵盤

原文鏈接:徹底搞定Android開發中軟鍵盤的常見問題
軟體盤的本質是什麼?軟鍵盤其實是一個Dialog。

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和按鈕都會被頂上去,且頁面布局不可以滾動。

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

有滾動布局xml

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

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

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

方法二:

有時進入Activity後不希望系統自動彈出軟鍵盤,我們可以按照下面的方法來實現:
方法一:
在AndroidMainfest.xml中選擇那個activity,設置windowSoftInputMode屬性為adjustUnspecified|stateHidden

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

方法三:
強制隱藏Android輸入法窗口

方法四:
EditText始終不彈出軟體鍵盤

EditText設置ScrollView壓縮背景圖片解決辦法
在你的Activity里加上

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

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

方法三:

方法四:

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

InputMethodManager的具體用法可以參考下面的鏈接: http://www.apihome.cn/api/android/InputMethodManager.html

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

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

同時,這個屬性還能控制項軟鍵盤右下角按鍵的顯示內容,默認情況下為回車鍵
android:imeOptions="actionNone" //輸入框右側不帶任何提示 android:imeOptions="actionGo" //右下角按鍵內容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片,搜索 android:imeOptions="actionSend" //右下角按鍵內容為'發送' android:imeOptions="actionNext" //右下角按鍵內容為'下一步' android:imeOptions="actionDone" //右下角按鍵內容為'完成'

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

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

這里的fitsSystemWindow具體的作用就是你的**contentview是否忽略actionbar,title,屏幕的底部虛擬按鍵,將整個屏幕當作可用的空間。 **
正常情況,contentview可用的空間是去除了actionbar,title,底部按鍵的空間後剩餘的可用區域;這個屬性設置為true,則忽略,false則不忽略

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

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

Ⅱ 如何獲取android的軟鍵盤輸入字元

有個方法可以做到在view中有個方法時onKeyPreIme,你去寫個MyEditText去繼承EditText,然後override這個方法,這樣你就可以獲得軟鍵盤的按鍵消息了,記得在你處理了不需要過濾的key後返回false

Ⅲ Android EditText獲取焦點並彈出軟鍵盤

1、首先,在xml文件中通過讓edittext獲取焦點

<EditText

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:padding="17dp"

        android:textColor="#333333"

        android:textColorHint="#999999"

        android:hint="請輸入課件描述..."

        android:gravity="top|left"

        android:background="@null"

        >

        <requestFocus/>

    </EditText>

2、在清單文件中給activity添加android:windowSoftInputMode=」stateVisible」屬性,這樣一進入這個頁面的時候游標就自動顯示,軟鍵盤也顯示出來

<activity

            android:name=".wonderfulmoment."

            android:windowSoftInputMode="stateVisible"></activity>

Ⅳ Android獲取軟鍵盤高度

在 Android 里我們是無法直接獲取軟鍵盤高度的,但是在某些場景下,我們又需要獲取軟鍵盤的高度。我們可以使用 ViewTreeObserver.OnGlobalLayoutListener 來監聽窗口大小的變化,當軟鍵盤彈出時,窗口高度會變小,使用原始窗口高度減去當前窗口高度,就可以得出軟鍵盤的高度了。

一般我們在 Activity 的 onCreate() 方法中開始監聽:

請注意當 Activity 被銷毀的時候,一定要移除監聽,否則就會產生內存泄漏:

通過以上方法可以實時監聽軟鍵盤的高度變化,特別是像有些輸入法例如搜狗,可以隨時切換拼音輸入、手寫輸入,這個時候軟鍵盤的高度都會發生變化。

除此之外,還可以通過該方法判斷軟鍵盤是否彈出。

Ⅳ 如何獲取android的軟鍵盤輸入字元

千峰扣丁學堂Android開發為您解答:
有個方法可以做到在view中有個方法時onKeyPreIme,你去寫個MyEditText去繼承EditText,然後override這個方法,這樣你就可以獲得軟鍵盤的按鍵消息了,記得在你處理了不需要過濾的key後返回false

Ⅵ android 有沒有獲取系統軟鍵盤的高度的方法

沒有直接獲得的方法,貌似有種從根layout高度來減的方法間接獲得,不過我沒試過。

Ⅶ Android怎麼彈出軟鍵盤,和開啟軟鍵盤

1、//隱藏軟鍵盤
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
2、//顯示軟鍵盤,控制項ID可以是EditText,TextView
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控制項ID, 0);

Ⅷ Android的EditText在怎樣獲取焦點並彈出軟鍵盤

  1. //讓編輯框彈出來,並顯示對誰進行評論

  2. commentEditText.setFocusable(true);

  3. commentEditText.setFocusableInTouchMode(true);

  4. commentEditText.requestFocus();

  5. //打開軟鍵盤

  6. InputMethodManagerimm=(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);

  7. imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

  8. //讓編輯框彈出來,並顯示對誰進行評論
    commentEditText.setFocusable(true);
    commentEditText.setFocusableInTouchMode(true);
    commentEditText.requestFocus();
    //打開軟鍵盤
    InputMethodManagerimm=(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);上面的代碼,能夠讓EditText獲取焦點,並彈出軟鍵盤,供輸入文本內容。特別適用於評論列表之類的場景。

Ⅸ 2018-08-15 Android adjustNothing模式下 獲取軟鍵盤高度

最後附上Demo地址 SoftKeyboardHeight

Ⅹ 如何獲取android的軟鍵盤的顯示狀態

最近項目中有一個編輯框,下面是個ListView。在觸發編輯框彈出軟鍵盤後,ListView還能滑動,並且ListView的item還能響應單擊。這樣的體驗效果很不好。於是便想在滑動或單擊item時判斷鍵盤是否彈出,若彈出,則把它隱藏。
網上一搜,發現Android並沒有直接提供軟鍵盤的彈出與隱藏判斷,一些解決方案諸如判斷父控制項的高度或者判斷

12

if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) 隱藏鍵盤;

的方法並沒有用,於是便從官方文檔著手。
發現InputMethodManager有一個方法isActive(View view):如果view是輸入法的活動view,則返回true。也就是說,如果是由view觸發彈出軟鍵盤,則返回true。哇,那問題就好辦了

12

if(isActive(edittext)) 隱藏鍵盤

接著讓另一個view強制獲取焦點,這樣isActivite(ediitext)就為false.
這個方法比較簡單,代碼比較短,也很好理解,希望能夠幫助有需要的人,也不枉費我調試幾個小時的功夫。
附上代碼:

12345678

InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);<br>private boolean hideKeyboard(){ if(inputMethodManager.isActive(searchEditText)){<br>//因為是在fragment下,所以用了getView()獲取view,也可以用findViewById()來獲取父控制項 getView().requestFocus();//使其它view獲取焦點.這里因為是在fragment下,所以便用了getView(),可以指定任意其它view inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); return true; } return false; }

ps:如果是手動彈出鍵盤,getActivity().getCurrentFocus()改成searchEditText.並且手動彈出的鍵盤isActivie()失效,可用標記來判斷.

熱點內容
字元串的存儲長度 發布:2023-02-06 20:16:53 瀏覽:978
影視文學腳本格式範例 發布:2023-02-06 20:12:04 瀏覽:891
英短貓的食物怎麼配置 發布:2023-02-06 20:09:49 瀏覽:938
存儲接伺服器 發布:2023-02-06 20:09:42 瀏覽:975
sqlupdate數據 發布:2023-02-06 19:55:58 瀏覽:716
android項目手工編譯 發布:2023-02-06 19:51:46 瀏覽:898
手機怎麼看是什麼編譯器 發布:2023-02-06 19:48:33 瀏覽:612
oracle存儲過程continue 發布:2023-02-06 19:46:12 瀏覽:56
精通腳本黑客光碟 發布:2023-02-06 19:43:37 瀏覽:725
db2創建資料庫表 發布:2023-02-06 19:41:27 瀏覽:852