`
quanminchaoren
  • 浏览: 911406 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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;
                }
            }

分享到:
评论
5 楼 flyar520 2013-07-04  
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机后进入launcher(没有锁屏的情况下)竖屏时会在屏幕的上半部分会黑屏过一会就又会好了(手机一直是竖屏),所以我在想机子启动的时候壁纸先刷一次横屏然后刷一次竖屏才回出现半部分黑屏状况。请问你这种方案可以解决我这个问题吗?
4 楼 flyar520 2013-07-04  
你好...我也遇到屏幕半屏刷成黑屏的问题...但是我的时在开机后进入launcher(没有锁屏的情况下)竖屏时会在屏幕的上半部分会黑屏过一会就又会好了(手机一直是竖屏),所以我在想机子启动的时候壁纸先刷一次横屏然后刷一次竖屏才回出现半部分黑屏状况。请问你这种方案可以解决我这个问题吗?
3 楼 leif2006 2012-05-09  
我把上边这个合进去看一下,谢谢啊。不知道是什么原理啊。
2 楼 杰迪-android 2012-03-03  
牛人,能注释解析下吗,我遇到同样的问题,进入横屏应用,返回launcher,壁纸失真,断层现象,求教
1 楼 loovle 2012-01-09  
你太牛了,我一直读这个,都没读懂

相关推荐

Global site tag (gtag.js) - Google Analytics