① android 有沒有獲取系統軟鍵盤的高度的方法
沒有直接獲得的方法,貌似有種從根layout高度來減的方法間接獲得,不過我沒試過。
② 如何獲取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()失效,可用標記來判斷.
③ 如何監聽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(…))即可實現監聽鍵盤隱藏或顯示事件。
④ 求教android判斷軟鍵盤是否顯示
判斷原理: 我們activity的頂級View是DecorView,獲取到DecorView並取到他的高度:
java">privatebooleanisSoftShowing(){
//獲取當前屏幕內容的高度
intscreenHeight=getWindow().getDecorView().getHeight();
//獲取View可見區域的bottom
Rectrect=newRect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
returnscreenHeight-rect.bottom!=0;
}
⑤ 如何在android中判斷軟鍵盤是否彈出或隱藏
Android中判斷軟鍵盤是否彈出或隱藏可以藉助軟鍵盤顯示和隱藏時,對主窗口進行了重新布局這個特性來進行偵聽。如果我們設置的模式為壓縮模式,那麼我們可以對布局的onSizeChanged函數進行跟蹤,如果為平移模式,那麼該函數可能不會被調用。
假設跟布局為線性布局,模式為壓縮模式,我們寫一個例子,當輸入法彈出時隱藏某個view,輸入法隱藏時顯示某個view。
public class ResizeLayout extends LinearLayout{
private OnResizeListener mListener;
public interface OnResizeListener {
void OnResize(int w, int h, int oldw, int oldh);
}
public void setOnResizeListener(OnResizeListener l) {
mListener = l;
}
public ResizeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);
if (mListener != null) {
mListener.OnResize(w, h, oldw, oldh);
}
}
}
⑥ android 怎麼判斷軟鍵盤是否打開
android判斷軟鍵盤打開的方式,可以計算主界面高度來判定,當判斷主界面的高度小於手機的高度,就可以判斷軟鍵盤打開了。
⑦ 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中判斷軟鍵盤是否彈出或隱藏
android判斷軟鍵盤是否彈出和隱藏,主要是通過InputMethodManager 這個類來監聽,如下代碼:
=(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;}