android鍵盤隱藏監聽
A. Android 手機軟鍵盤的彈起和關閉的監聽
在很多Android App 開發的過程中,需要對Activity 中 軟鍵盤的彈起和關閉進項監聽,但是Andoid中並沒有提供相對應的api進行監聽, 我有一個簡單的方法。
首先需要知道一些基礎知識
在manifest文件中可以設置Activity的android:windowSoftInputMode屬性,這個屬性值常見的設置如下:android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
那麼這里值的含義列表如下:
1、stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
2、stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity里的狀態,無論是隱藏還是顯示
3、stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
4、stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
5、stateVisible:軟鍵盤通常是可見的
6、stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
7、adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
8、adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
9、adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分
案例:
1.我們需要將監聽所在的Activity在Manifest文件中的設置為如下形式:
<activity
android:name="com.zy.project.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" >
<intent-filter>
<action android:name="android.intent.action.MAIN/>
<category android:name="android.intent.category.LAUNCHER/>
</intent-filter>
</activity>
當有軟鍵盤彈起時,Activity的布局大小會被滾動上去,但是你仍然可以通過滑動瀏覽所有。
2 需要在外層布局文件設置一個id,並在activity 中設置監聽
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnLayoutChangeListener{
//Activity最外層的Layout視圖
private View rootView;
//屏幕高度
private int screenHeight = 0;
//軟體盤彈起後所佔高度閥值 一般是佔用屏幕的1/3
private int keyHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = findViewById(R.id.root_layout);
//獲取屏幕高度
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
//閥值設置為屏幕高度的1/3
keyHeight = screenHeight/3;
}
@Override
protected void onResume() {
super.onResume();
//添加layout大小發生改變監聽器
rootView.addOnLayoutChangeListener(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//old是改變前的左上右下坐標點值,沒有old的是改變後的左上右下坐標點值
// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);
// System.out.println(left + " " + top +" " + right + " " + bottom);
//現在認為只要控制項將Activity向上推的高度超過了1/3屏幕高,就認為軟鍵盤彈起
if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){
Toast.makeText(MainActivity.this, "監聽到軟鍵盤彈起...", Toast.LENGTH_SHORT).show();
}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){
Toast.makeText(MainActivity.this, "監聽到軟體盤關閉...", Toast.LENGTH_SHORT).show();
}
}
本文來自:http://m.blog.csdn.net/bear_huangzhen/article/details/45896333
B. Android開發中怎麼在後台服務中監聽訊飛輸入法的莫得鍵盤的顯示和隱藏
摘要 根據切換輸入法,會在通知欄顯示通知實現。優點就是簡單高效,缺點就是手機必須安裝兩個以上輸入法。
C. 如何監聽鍵盤是否隱藏 android
// 在Manifest的配置Activity設置android:windowSoftInputMode="stateVisible|adjustResize"
// 目前的View為整個窗口大小, 如果不是可能要調整
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
int measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
if(measuredHeight < getHeight() && input != null) { // 軟鍵盤顯示
// @input 自定義組件, input.mRightBY 為該組件的下邊界
int distance = mInput.mRightBY - measuredHeight; // 計算滾動距離
if(distance > 0) {//軟鍵盤顯示
}
} else if(measuredHeight > getHeight()) { // 軟鍵盤隱藏
}
setMeasuredDimension(measuredWidth, measuredHeight);
}
D. android 橫屏狀態,如何監聽鍵盤的彈起與隱藏
android鍵盤監聽不了,只有監聽布局的狀態,所以要重寫布局進行監聽
E. android 怎樣監聽軟鍵盤關閉
我們在android手機上面有時候會遇到監聽手機軟鍵盤按鍵的時候,例如:我們在瀏覽器輸入url完畢後可以點擊軟鍵盤右下角的「GO」按鍵載入url頁面;在點擊搜索框的時候,點擊右下角的search符號鍵可以進行搜索;或者在全部數據輸入完畢後,點擊右下角的"done"就馬上進行下一步操作。
function 1:
重寫Activity的dispatchKeyEvent(KeyEvent event)方法,在其中監聽KeyEventKey.KEYCODE_ENTER鍵(右下角確定鍵),當此鍵按下的時候,隱藏輸入法軟鍵盤,設置edittext內容和載入webview內容。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
/*隱藏軟鍵盤*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return super.dispatchKeyEvent(event);
}
function 2:
重寫dispatchKeyEvent(KeyEvent event)的方法感覺有點用牛刀的感覺,因為我們非常可能在這個方法中進行其他任務,所以我們可以使用OnKeyListener的方法來監聽軟鍵盤按鍵。
private OnKeyListener onKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER){
/*隱藏軟鍵盤*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return false;
};
edittext.setOnKeyListener(onKeyListener);
function 3:
第三種方法我認為可以幫助程序員更精確的判斷右下角按鍵情況,以便應對更加復雜的情況。它可以幫助程序員依據當前郵件下為「GO」,「done」,「search」鍵的情況下做出更細分的操作。
edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
/*判斷是否是「GO」鍵*/
if(actionId == EditorInfo.IME_ACTION_GO){
/*隱藏軟鍵盤*/
InputMethodManager imm = (InputMethodManager) v
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(
v.getApplicationWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return false;
});
F. android 判斷鍵盤彈出和消失的監聽事件的方法
原理:自定義布局的onSizeChanged()方法,在其中增加一個監聽介面,當軟鍵盤顯示或隱藏使得布局尺寸發生改變,就能捕獲到這個事件。
具體方法如下:
首先,在清單文件Manifest.xml中的對應的Activity標簽內設置
android:windowSoftInputMode=」adjustResize」
作用是當軟鍵盤顯示或隱藏時,該Activity主窗口總是會被調整大小以便留出軟鍵盤的空間。唯有這樣才能保證布局觸發onSizeChanged()方法。
然後,自定義一個布局,具體是RelativeLayout、LinearLayout或是其它的,根據實際情況而定,自定義的目的是在其onSizeChanged()方法中增加一個監聽介面。這里給出一個自定義RelativeLayout布局代碼:
public class CustomRelativeLayout extends RelativeLayout {
private OnSizeChangedListener listener;
public CustomRelativeLayout(Context context) {
super(context);
}
public CustomRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
Log.d(TAG.CUSTOM_VIEW, 「onSizeChanged」);
super.onSizeChanged(w, h, oldw, oldh);
if (listener != null) {
listener.onSizeChanged(w, h, oldw, oldh);
}
}
public void setOnSizeChangedListener(OnSizeChangedListener listener) {
this.listener = listener;
}
/** * Activity主窗口大小改變時的回調介面(本示例中,等價於軟鍵盤顯示隱藏時的回調介面) */
public interface OnSizeChangedListener {
public void onSizeChanged(int w, int h, int oldw, int oldh);
}
}
最後,在程序中使用此介面(xxx.setOnSizeChangedListener(…))即可實現監聽鍵盤隱藏或顯示事件。
G. Android開發中怎麼在後台服務中監聽訊飛輸入法的莫得鍵盤的顯示和隱藏
摘要 1. 通過ImputMethodManager 獲取輸入法的打開/關閉狀態
H. 如何在Android中判斷軟鍵盤是否彈出或隱藏
android判斷軟鍵盤是否彈出和隱藏,主要是通過InputMethodManager 這個類來監聽,如下代碼:
java">=(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
privatebooleanhideKeyboard(){if(inputMethodManager.isActive(searchEditText)){
//因為是在fragment下,所以用了getView()獲取view,也可以用findViewById()來獲取父控制項getView().requestFocus();//強制獲取焦點,不然getActivity().getCurrentFocus().getWindowToken()會報錯inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);inputMethodManager.restartInput(searchEditText);returntrue;}returnfalse;}
I. 如何監聽Android 虛擬鍵的隱藏和顯示
InputMethodManager
imm
=
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
//得到InputMethodManager的實例
if
(imm.isActive())
{
//如果開啟
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
//關閉軟鍵盤,開啟方法相同,這個方法是切換開啟與關閉狀態的