读书人

Android横屏状态上返回到壁纸界面屏幕

发布时间: 2012-10-05 15:34:34 作者: rapoo

Android横屏状态下返回到壁纸界面屏幕刷新问题

前两款android智能机开发过程中曾经遇到过在launcher主屏界面上建一个应用快捷图标,在横屏的状态下点击打开此应用,然后按返回键,很大概率上屏幕会刷新失败,显示半屏黑屏,是由于关闭当前activity时是横屏状态,关闭后返回到壁纸界面是竖屏,windowManagerService刷新处理问题。现将解决方案贴出来,望以后遇到此问题的同学借鉴:

?

??????????? boolean gone = win.mViewVisibility == View.GONE
??????????????????? || !win.mRelayoutCalled
??????????????????? || win.mRootToken.hidden
??????????????????? || (atoken != null && atoken.hiddenRequested)
??????????????????? || win.mAttachedHidden
??????????????????? || win.mExiting || win.mDestroying;

??????????? if (!win.mLayoutAttached) {
??????????????? if (DEBUG_LAYOUT) Slog.v(TAG, "First pass " + win
??????????????????????? + ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame
??????????????????????? + " mLayoutAttached=" + win.mLayoutAttached);
??????????????? if (DEBUG_LAYOUT && gone) Slog.v(TAG, "? (mViewVisibility="
??????????????????????? + win.mViewVisibility + " mRelayoutCalled="
??????????????????????? + win.mRelayoutCalled + " hidden="
??????????????????????? + win.mRootToken.hidden + " hiddenRequested="
??????????????????????? + (atoken != null && atoken.hiddenRequested)
??????????????????????? + " mAttachedHidden=" + win.mAttachedHidden);
??????????? }

??????????? if (win.mIsWallpaper)
??????????? {
??????????????? gone = win.mViewVisibility == View.GONE
??????????????? ??? ??? || !win.mRelayoutCalled
??????????????? ??? ??? || (atoken != null && atoken.hiddenRequested)
??????????????? ??? ??? || win.mAttachedHidden
??????????????? ??? ??? || win.mExiting || win.mDestroying;
??????????? }
???????????
??????????? // If this view is GONE, then skip it -- keep the current
??????????? // frame, and let the caller know so they can ignore it
??????????? // if they want.? (We do the normal layout for INVISIBLE
??????????? // windows, since that means "perform layout as normal,
??????????? // just don't display").
??????????? if (!gone || !win.mHaveFrame) {
??????????????? if (!win.mLayoutAttached) {
??????????????????? mPolicy.layoutWindowLw(win, win.mAttrs, null);
??????????????????? win.mLayoutSeq = seq;
??????????????????? if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame="
??????????????????????????? + win.mFrame + " mContainingFrame="
??????????????????????????? + win.mContainingFrame + " mDisplayFrame="
??????????????????????????? + win.mDisplayFrame);
??????????????? } else {
??????????????????? if (topAttached < 0) topAttached = i;
??????????????? }
??????????? }

1 楼 loovle 2012-01-09 你太牛了,我一直读这个,都没读懂 2 楼 杰迪-android 2012-03-03 牛人,能注释解析下吗,我遇到同样的问题,进入横屏应用,返回launcher,壁纸失真,断层现象,求教 3 楼 leif2006 2012-05-09 我把上边这个合进去看一下,谢谢啊。不知道是什么原理啊。

读书人网 >Android

热点推荐