android 软键盘在全屏下设置adjustResize无效的问题
2015-06-16 18:17
721 查看
全屏模式下,即使将activity的windowSoftInputMode的属性设置为:adjustResize,在键盘显示时它未将Activity的Screen向上推动,所以你Activity的view的根树的尺寸是没有变化的。在这种情况下,你也就无法得知键盘的尺寸,对根view的作相应的推移。全屏下的键盘无法Resize的问题从2.1就已经存在了,直到现在google还未给予解决。
感谢Ricardo提供的轮子,他在stackoverflow找到了解决方案。有人已经封装好了该类,你只需引用就OK了
参考:http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/19494006#19494006
解决问题:例如聊天输入条(android:layout_alignParentBottom=”true”) 当软键盘弹出的时候 不浮起来
用 法: 在setContentView(R.layout.xxx);之后调用AndroidBug5497Workaround.assistActivity(this);
AndroidBug5497Workaround.java:
感谢Ricardo提供的轮子,他在stackoverflow找到了解决方案。有人已经封装好了该类,你只需引用就OK了
参考:http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible/19494006#19494006
解决问题:例如聊天输入条(android:layout_alignParentBottom=”true”) 当软键盘弹出的时候 不浮起来
用 法: 在setContentView(R.layout.xxx);之后调用AndroidBug5497Workaround.assistActivity(this);
AndroidBug5497Workaround.java:
[code]> import android.app.Activity; import android.graphics.Rect; import > android.view.View; import android.view.ViewTreeObserver; import > android.widget.FrameLayout; > > 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); > return (r.bottom - r.top); > } > > }
相关文章推荐
- android performClick使用
- Android 实现监听开机启动开启后台服务,并实现自动重启。
- Android四大基本组件介绍与生命周期
- android中sharedPreferences的用法
- 新导入工程报Unable to resolve target 'android-18'和R cannot be resolved_移动开发
- Android 程序编译问题Unable to execute dex: Multiple dex files define
- AndroidStudio中如何把工程从22(5.1.1)改成21(5.0.1)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android邮件发送详解
- Android Gradle Plugin 版本
- Android Service完全解析,关于服务你所需知道的一切(上)
- 【Android每日点滴】Fragment与Activity交互
- Android开发技巧三--格式化TextView文本
- andriod 三星手机拍照各种奇葩问题
- Android应用开发之使用PhoneGap(cordova)实现拍照上传功能
- Android bug——Launcher 0x506导致花屏问题
- android edittext设置actionSearch不生效的处理
- android 使用DigestUtilsmd5加密
- Android系统/proc目录详解
- Android Volley完全解析