解决android 软键盘在全屏下设置adjustResize无效的问题
2017-06-15 12:42
399 查看
全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的尺寸,对根view的作相应的推移。全屏下的键盘无法Resize的问题从2.1就已经存在了,直到现在google还未给予解决。有人已经封装好了该类,你只需引用就OK了。 使用方法 在你的Activity的oncreate()方法里调用AndroidBug5497Workaround.assistActivity(this);即可。注意:在setContentView(R.layout.xxx)之后调用。
public class AndroidBug5497Workaround {
// For more information, see https://code.google.com/p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
public static void assistActivity (Activity activity) {
new AndroidBug5497Workaround(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private AndroidBug5497Workaround(Activity activity) {
FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4)) {
// keyboard probably just became visible
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
// keyboard probably just became hidden
frameLayoutParams.height = usableHeightSansKeyboard;
}
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
if(r.top==0){
r.top=statusBarH;//状态栏目的高度
}
return (r.bottom - r.top);
}
}
相关文章推荐
- 解决android 软键盘在全屏下设置adjustResize无效的问题
- android 软键盘在全屏下设置adjustResize无效的问题
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- android设置全屏时,windowSoftInputMode设置无效,软键盘遮挡问题
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- android中activity设置全屏显示无效问题解决。
- android 软键盘挡住输入内容,adjustResize设置了也无效
- android adjustresize not working when using windowTranslucentStatus,解决全屏效果与输入框属性冲突的问题
- android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
- Android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
- android开发解决设置铃声无效问题
- android 解决vedeoView设置高度无效的问题
- Android 设置状态栏后adjustResize属性无效
- Android中EditText 设置 imeOptions 无效问题的解决方法
- Android全屏和adjustResize的冲突解决
- 解决 android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题
- Android闹钟启动时间设置无效问题的解决方法
- 解决Android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题
- Android自定义布局的背景在多分辨率的情况下设置fill_parent时背景不能够横向全屏的问题解决
- Android程序开发中关于设置全屏无效问题