【轉】Android點擊空白區域,隱藏輸入法軟鍵盤


原文網址:http://www.2cto.com/kf/201505/401382.html

很多時候,我們在使用應用時,會出現輸入法軟鍵盤彈出的問題,通常情況下,我們默認會使用戶點擊返回鍵或者下一步對軟鍵盤進行隱藏。為了更好的體驗,我們可以實現當用戶使用完畢軟鍵盤時。點擊空白區域即可實現隱藏的功能。效果如圖所示:
這里寫圖片描述


代碼實現

代碼塊語法遵循標准markdown代碼,例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<code class = "language-java" hljs= "" > package example.com.jinlin.myapplication;
 
import android.content.Context;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
 
/**
  * Created by J!nl!n on 15/5/21.
  */
public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         iniView();
     }
 
     public abstract void iniView();
 
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
             View v = getCurrentFocus();
             if (isShouldHideKeyboard(v, ev)) {
                 hideKeyboard(v.getWindowToken());
             }
         }
         return super .dispatchTouchEvent(ev);
     }
 
     /**
      * 根據EditText所在坐標和用戶點擊的坐標相對比,來判斷是否隱藏鍵盤,因為當用戶點擊EditText時則不能隱藏
      *
      * @param v
      * @param event
      * @return
      */
     private boolean isShouldHideKeyboard(View v, MotionEvent event) {
         if (v != null && (v instanceof EditText)) {
             int [] l = { 0 , 0 };
             v.getLocationInWindow(l);
             int left = l[ 0 ],
                 top = l[ 1 ],
                 bottom = top + v.getHeight(),
                 right = left + v.getWidth();
             if (event.getX() > left && event.getX() < right
                     && event.getY() > top && event.getY() < bottom) {
                 // 點擊EditText的事件,忽略它。
                 return false ;
             } else {
                 return true ;
             }
         }
         // 如果焦點不是EditText則忽略,這個發生在視圖剛繪制完,第一個焦點不在EditText上,和用戶用軌跡球選擇其他的焦點
         return false ;
     }
 
     /**
      * 獲取InputMethodManager,隱藏軟鍵盤
      * @param token
      */
     private void hideKeyboard(IBinder token) {
         if (token != null ) {
             InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
             im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
}
</code>

當然我們還有更加簡單的方法來實現該功能,只需要重寫onTouchEvent方法即可。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
// 點擊空白區域 自動隱藏軟鍵盤
     public boolean onTouchEvent(MotionEvent event) {
         if ( null != this .getCurrentFocus()){
             /**
              * 點擊空白位置 隱藏軟鍵盤
              */
             InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
             return mInputMethodManager.hideSoftInputFromWindow( this .getCurrentFocus().getWindowToken(), 0 );
         }
         return super .onTouchEvent(event);
     }

使用一個BaseActivity進行一些處理公共操作,其他Activity均繼承自該基類Activity即可,則所有界面均可實現點擊空白區域,隱藏軟鍵盤。

 

android 點擊關閉軟鍵盤

 

原文網址:http://www.2cto.com/kf/201412/360428.html

在項目中,editText獲取焦點后,會自動彈出軟鍵盤,關閉的時候一般需要按返回鍵或者點擊軟鍵盤上的按鈕,

 

即使當前activity已經finish掉,軟鍵盤依然存在,會影響用戶的體驗。

 

網上目前有很多很詳細的辦法,比如點擊其他空白區域,軟鍵盤就會消失之類的方法,我們項目中沒有要求這個,要求的是只要

 

不遮擋其他操作,還有當前Activity關閉掉后軟鍵盤消失就行,

 

今天給大家分享兩個辦法:

 

 

 

?
1
2
3
4
5
6
7
8
9
10
11
//此方法,如果顯示則隱藏,如果隱藏則顯示
private void hintKbOne() {
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);   
// 得到InputMethodManager的實例
if (imm.isActive()) {
  // 如果開啟
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
         
     }
}

 

?
1
2
3
4
5
6
7
8
9
//此方法只是關閉軟鍵盤
private void hintKbTwo() {
  InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);           
  if (imm.isActive()&&getCurrentFocus()!= null ){
     if (getCurrentFocus().getWindowToken()!= null ) {
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
     }            
  }
}


當需要點擊事件關閉軟鍵盤的時候只需要調用方法就好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM