Browse Source

处理华为tab遮挡问题

Bitliker 7 years ago
parent
commit
2fefcf9de6

+ 78 - 0
app_core/common/src/main/java/com/core/base/view/AndroidBug5497Workaround2.java

@@ -0,0 +1,78 @@
+package com.core.base.view;
+
+import android.app.Activity;
+import android.graphics.Rect;
+import android.os.Build;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.widget.FrameLayout;
+
+public class AndroidBug5497Workaround2 {
+   public static void assistActivity(Activity activity) {
+   new AndroidBug5497Workaround2(activity);   
+   }  
+  private View mChildOfContent;
+  private int usableHeightPrevious;  
+  private FrameLayout.LayoutParams frameLayoutParams;
+  private int contentHeight;  
+  private   boolean isfirst = true;  
+  private   Activity activity; 
+  private  int statusBarHeight;  
+
+  private AndroidBug5497Workaround2(Activity activity) {      
+  //获取状态栏的高度        
+  int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");        
+  statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);      
+  this.activity = activity;
+  FrameLayout content = (FrameLayout)activity.findViewById(android.R.id.content);        
+  mChildOfContent = content.getChildAt(0);   
+
+  //界面出现变动都会调用这个监听事件        
+  mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+  public void onGlobalLayout() {              
+      if (isfirst) { 
+            contentHeight = mChildOfContent.getHeight();//兼容华为等机型                    
+            isfirst = false;  
+       }               
+       possiblyResizeChildOfContent();         
+    }      
+   });     
+
+   frameLayoutParams = (FrameLayout.LayoutParams)     
+   mChildOfContent.getLayoutParams();    
+ } 
+
+  //重新调整跟布局的高度 
+ private void possiblyResizeChildOfContent() {  
+
+  int usableHeightNow = computeUsableHeight();       
+
+  //当前可见高度和上一次可见高度不一致 布局变动      
+  if (usableHeightNow != usableHeightPrevious) {            
+    //int usableHeightSansKeyboard2 = mChildOfContent.getHeight();//兼容华为等机型
+    int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();    
+    int heightDifference = usableHeightSansKeyboard - usableHeightNow;          
+    if (heightDifference > (usableHeightSansKeyboard / 4)) {          
+     // keyboard probably just became visible        
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
+    //frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;                    
+    frameLayoutParams.height = usableHeightSansKeyboard - heightDifference + statusBarHeight;                
+     } else {                
+     frameLayoutParams.height = usableHeightSansKeyboard -heightDifference;                
+     }            
+   } else {     
+   frameLayoutParams.height = contentHeight;        
+   }   
+     
+   mChildOfContent.requestLayout();       
+   usableHeightPrevious = usableHeightNow;    
+   }  
+ }   
+ /**     * 计算mChildOfContent可见高度     ** @return     */    
+ private int computeUsableHeight() {  
+   Rect r = new Rect();
+   mChildOfContent.getWindowVisibleDisplayFrame(r);       
+   return (r.bottom - r.top);  
+   }
+}
+

+ 2 - 2
app_modular/appmessages/src/main/java/com/modular/appmessages/activity/ApprovalActivity.java

@@ -35,7 +35,7 @@ import com.common.system.DisplayUtil;
 import com.core.app.AppConfig;
 import com.core.app.MyApplication;
 import com.core.base.BaseActivity;
-import com.core.base.view.AndroidBug5497Workaround;
+import com.core.base.view.AndroidBug5497Workaround2;
 import com.core.model.Approval;
 import com.core.model.OAConfig;
 import com.core.model.SelectBean;
@@ -187,8 +187,8 @@ public class ApprovalActivity extends BaseActivity implements IApproval, Approva
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        AndroidBug5497Workaround.assistActivity(this);
         setContentView(R.layout.activity_approval);
+        AndroidBug5497Workaround2.assistActivity(this);
         initView();
     }