AndroidBug5497Workaround (华为兼容)

public class AndroidBug5497Workaround { 
public static void assistActivity(Activity activity) { 
new AndroidBug5497Workaround(activity); 
} 
private View mChildOfContent; 
private int usableHeightPrevious; 
private FrameLayout.LayoutParams frameLayoutParams; 
private int contentHeight; 
private boolean isfirst = true; 
private Activity activity; 
privateint statusBarHeight; 
private AndroidBug5497Workaround(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); 
} 
} 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值