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;
}
}
更多相关文章
- Android(安卓)N 多窗口的设计
- 设置Android(安卓)Studio启动时打开欢迎界面(选择最近打开过的工
- Android(安卓)UI常用实例 如何实现欢迎界面(Splash Screen)
- Android(安卓)- 下拉刷新
- Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现
- Android(安卓)用户界面---样式和主题(Styles and Themes)(一)
- Android中的Handler使用总结
- Android---Activity初探
- 使用Android辅助服务AccessibilityService实现的微信自动抢红包