沿着这个问题的线索,可以追溯到:
http://code.google.com/p/android/issues/detail?id=5497
,安卓官方问题回馈帖,这个问题的代号为“
5497
” ,就这个问题帖的回复来看,该问题困惑了许多人数年之久,问题发布日期“
Dec 16, 2009
”,现在我在安卓
4.4.2
环境运行,这个问题依旧存在。在此推荐这其中的一个解决方法,来自:stackoverflow.com,实测有效。
在Activity/Fragment的onCreate()/onCreateView()里调用AndroidBug5497Workaround.assistActivity(Activity);代码搬运,希望能够帮助到各位。感谢答案提供者,祝生活愉快。
- 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);
- }
- }
在Activity/Fragment的onCreate()/onCreateView()里调用AndroidBug5497Workaround.assistActivity(Activity);代码搬运,希望能够帮助到各位。感谢答案提供者,祝生活愉快。