popwindow 焦点问题,物理返回键截获,软键盘监听问题
首先是setFocusable這個方法,獲取焦點;如果不獲取焦點,那么popwindow中的控件都沒有辦法獲取焦點和事件響應問題。
如果獲取焦點,那么popwindow就會攔截屏幕上的點擊觸摸事件以及物理鍵等。那么只有當popwindow消失,那么popwindow下面的頁面才會響應事件。
當然也可以做到popwindow獲取事件響應也可以讓popwindow以外的區域也可以獲取,那就是設置setBackgroundDrawable(new BitmapDrawable())。但是這樣會造就只要觸摸到popwindow以外區域popwindow就會消失。說白了setBackgroundDrawable(new BitmapDrawable())其實似的popwindow消失而是其他頁面獲取焦點。
設置了setBackgroundDrawable(new BitmapDrawable()),那么強制性的(當焦點在popwindow以外)消失popwindow,那么
this.setOutsideTouchable(false); 就會無效,那么popwindow,你想讓其在觸摸popwindow以外區域不消失,都失效。總之:setBackgroundDrawable(new BitmapDrawable()) 這個方法會強制性的將popwindow在 事件在popwindow區域以外的時候消失。但是有的時候,setFocusable 無效。如響應物理返回鍵,所以有的時候必須添加setBackgroundDrawable(new BitmapDrawable()) 來響應物理返回鍵。
那么setFocusable 讓popwindow獲取焦點,如何自己處理物理返回鍵呢?
只能從軟鍵盤的彈出隱藏做監聽:
public class SoftInputListener {private static boolean sLastVisiable = true; private SoftInputListenerCallback back; public SoftInputListener(Activity activity , SoftInputListenerCallback callback){back = callback; addOnSoftKeyBoardVisibleListener(activity); }/**監聽軟鍵盤狀態 * @param activity * @param */ public void addOnSoftKeyBoardVisibleListener(Activity activity){final View decorView = activity.getWindow().getDecorView(); decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Override public void onGlobalLayout() {Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHight = rect.bottom - rect.top; int hight = decorView.getHeight(); boolean visible = (double) displayHight / hight < 0.8; if(visible != sLastVisiable){back.onSoftKeyBoardVisible(visible); }sLastVisiable = visible; }}); }public interface SoftInputListenerCallback{abstract void onSoftKeyBoardVisible(boolean visible); } ?在activity中調用: new SoftInputListener(this, new SoftInputListener.SoftInputListenerCallback(){@Override public void onSoftKeyBoardVisible(boolean visible) {if(!visible){if(CommentCons.mInputPopdw != null &&CommentCons.mInputPopdw.isShowing()){CommentCons.mInputPopdw.dismiss(); }}} });
通過手動關閉軟鍵盤:
public void closeSoftInput() {Activity activity = (Activity) mContext; if(activity.getWindow().getAttributes().softInputMode ==WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE){InputMethodManager inputMethodManager=(InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(mEditInput.getWindowToken(),0); } } manifest文件 必須添加: android:windowSoftInputMode="stateAlwaysHidden|adjustPan" > stateAlwaysHidden不可缺少? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的popwindow 焦点问题,物理返回键截获,软键盘监听问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一招教你将扫描好的身份证图片按实际大小打
- 下一篇: 适合眼膜的走心文案30句