解决android 软键盘在全屏下设置adjustResize无效的问题

来源:互联网 发布:淘宝卖家服务态度评分 编辑:程序博客网 时间:2024/05/15 18:55
全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的尺寸,对根view的作相应的推移。全屏下的键盘无法Resize的问题从2.1就已经存在了,直到现在google还未给予解决。有人已经封装好了该类,你只需引用就OK了。使用方法在你的Activity的oncreate()方法里调用AndroidBug5497Workaround.assistActivity(this);即可。注意:在setContentView(R.layout.xxx)之后调用。
  1. public class AndroidBug5497Workaround {  
  2.    
  3.     // For more information, see https://code.google.com/p/android/issues/detail?id=5497  
  4.     // To use this class, simply invoke assistActivity() on an Activity that already has its content view set.  
  5.    
  6.     public static void assistActivity (Activity activity) {  
  7.         new AndroidBug5497Workaround(activity);  
  8.     }  
  9.    
  10.     private View mChildOfContent;  
  11.     private int usableHeightPrevious;  
  12.     private FrameLayout.LayoutParams frameLayoutParams;  
  13.    
  14.     private AndroidBug5497Workaround(Activity activity) {  
  15.         FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);  
  16.         mChildOfContent = content.getChildAt(0);  
  17.         mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {  
  18.             public void onGlobalLayout() {  
  19.                 possiblyResizeChildOfContent();  
  20.             }  
  21.         });  
  22.         frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();  
  23.     }  
  24.    
  25.     private void possiblyResizeChildOfContent() {  
  26.         int usableHeightNow = computeUsableHeight();  
  27.         if (usableHeightNow != usableHeightPrevious) {  
  28.             int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();  
  29.             int heightDifference = usableHeightSansKeyboard - usableHeightNow;  
  30.             if (heightDifference > (usableHeightSansKeyboard/4)) {  
  31.                 // keyboard probably just became visible  
  32.                 frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;  
  33.             } else {  
  34.                 // keyboard probably just became hidden  
  35.                 frameLayoutParams.height = usableHeightSansKeyboard;  
  36.             }  
  37.             mChildOfContent.requestLayout();  
  38.             usableHeightPrevious = usableHeightNow;  
  39.         }  
  40.     }  
  41.    
  42.     private int computeUsableHeight() {  
  43.         Rect r = new Rect();  
  44.         mChildOfContent.getWindowVisibleDisplayFrame(r);  
  45.     if(r.top==0){  
  46.      r.top=statusBarH;//状态栏目的高度  
  47.     }  
  48.         return (r.bottom - r.top);  
  49.     }  
  50.    
  51. }  
阅读全文
0 0
原创粉丝点击