Android在全屏状态下键盘覆盖输入框问题
来源:互联网 发布:企业短信群发软件 编辑:程序博客网 时间:2024/05/21 18:36
Android中有个Bug,在设置getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);为全屏状态下点击输入框显示键盘时,界面并不会重新渲染调整位置,android:windowSoftInputMode="adjustResize"在FullScreen下没有作用。
找了很久才找到解决方法,该方法是在Activity onCreate时通过ViewTreeObserver注册GlobalLayoutListener监听,当全局布局改变时会触发该监听。下面是代码部分:
package com.maituo.sdk.util;import android.app.Activity;import android.graphics.Rect;import android.view.View;import android.view.ViewGroup.LayoutParams;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 mContent; private int usableHeightPrevious; private LayoutParams layoutParams; public static void assistView(View v){ new AndroidBug5497Workaround(v); } public static void assistActivity (Activity activity) { new AndroidBug5497Workaround(activity); } private AndroidBug5497Workaround(Activity activity){ FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); mContent = content.getChildAt(0); addGlobalLayoutListener(mContent); } //有时通过Activity获取view并不能满足,所以我加了直接传view的一个构造方法满足用到Fragment的情况 private AndroidBug5497Workaround(View v) { //FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); // mChildOfContent = content.getChildAt(0); addGlobalLayoutListener(v); } private void addGlobalLayoutListener(View v){ mContent = v; mContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { possiblyResizeChildOfContent(); } }); // LayoutParams放在这里有可能得到的为空 // LayoutParams = mContent.getLayoutParams(); } private void possiblyResizeChildOfContent() { int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) { layoutParams = mContent.getLayoutParams(); int usableHeightSansKeyboard = mContent.getRootView().getHeight(); int heightDifference = usableHeightSansKeyboard - usableHeightNow; if (heightDifference > (usableHeightSansKeyboard/4)) { // keyboard probably just became visible layoutParams.height = usableHeightSansKeyboard - heightDifference; } else { // keyboard probably just became hidden layoutParams.height = usableHeightSansKeyboard; } mContent.requestLayout(); usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mContent.getWindowVisibleDisplayFrame(r); return (r.bottom - r.top); }}
只要调用
AndroidBug5497Workaround.
assistActivity(
activity)或AndroidBug5497Workaround
.
assistView(view)就可以了
0 0
- Android在全屏状态下键盘覆盖输入框问题
- 解决Android webview 全屏模式下键盘遮挡输入框问题
- Android WebView 全屏下 输入框被键盘遮挡 问题解决
- android Landscape模式下,禁止输入键盘全屏显示
- Android解决全屏下WebView中输入框被键盘遮挡
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- Android解决全屏下WebView中输入框被键盘遮挡
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法
- (问题)android PinYinIME横屏模式禁止全屏输入 & 调整横屏模式下键盘高度
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- 解决安卓全屏“FLAG_FULLSCREEN”状态下“adjustResize”失效,全屏状态下WebView的输入框被软键盘挡住的问题
- Andriod解决键盘覆盖输入框的问题
- arduino servo的用法
- java对图片的转码和解码 实用
- ffmpeg截取一段视频中一段视频
- 剑指offer--面试题27:二叉搜索树与双向链表--Java实现
- 实现类似Tumblr的Title Bar跟随滑动渐变的效果
- Android在全屏状态下键盘覆盖输入框问题
- 动态规划--凸多边形最优三角剖分
- Android的canvas.rotate()与canvas.translate研究
- Unity3D跑酷游戏开发-无尽的道路
- hive面试题目:表大概有2T左右,对表数据转换
- 51单片机LCD1602程序详解
- 让所有正在播放音乐的播放器主动停止播放
- hive面试题目:表大概有2T左右,对表数据转换--2
- 超级2048