android 解决华为 SlidingMenu出现白屏

释放双眼,带上耳机,听听看~!

今天,讲讲如何处理SlidingMenu在华为手机上出现的白屏。

之前做了一个自定义的Monitor,用来播放视频,但是在华为手机上,每次滑动SlideMenu后,Monitor会出现白屏,之前一直不知道为什么。后来,在网上搜索了资料,终于解决了问题。

问题原因是由于SlidingMenu滑动时开启了硬件加速,但是在华为手机上没有很好的兼容。具体代码是:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void manageLayers(float percentOpen) {
if (Build.VERSION.SDK_INT < 11)
return;
boolean layer = percentOpen > 0.0f && percentOpen < 1.0f;
final int layerType = layer ? View.LAYER_TYPE_HARDWARE
: View.LAYER_TYPE_NONE;
if (layerType != getContent().getLayerType()) {
getHandler().post(new Runnable() {
public void run() {
Log.v(TAG, "changing layerType. hardware? "
+ (layerType == View.LAYER_TYPE_HARDWARE));
getContent().setLayerType(layerType, null);
getMenu().setLayerType(layerType, null);
if (getSecondaryMenu() != null) {
getSecondaryMenu().setLayerType(layerType, null);
}
}
});
}
}

这段代码的含义是,当滑动时,菜单和内容都开启硬件加速,滑动结束后,取消硬件加速。解决问题也很简单。

解决方法一:

第一种解决方法是关闭硬件加速

在AndroidManifest.xml文件中在application标签中添加属性 android:hardwareAccelerated=”false”,如图:

这里写图片描述

但是,这种方法有个缺点,就是开启了硬件加速之后,如果碰到非常复杂的界面布局,嵌套太多的话,就会报StackOverflow的错误,可以自己百度一下,如果你恰好遇到一个喜欢留个FrameLayout,然后在代码里面不停的removeAllView()、addView(),动态添加布局的猪一样的队友,那么恭喜你,很有可能遇到我说的情况。顺便说一下,优雅的解决复杂布局的方法是用多个Fragment来拆开复杂界面、分离页面逻辑

万一你遇到开启硬件加速后,复杂界面报错的情况怎么办呢?别着急,临时关闭硬件加速就可以了,告诉机器,这个界面不要硬件加速。

首先找到报错的那个界面,例如MainActivity,然后设置这个Activity的属性,针对这个Activity不要使用硬件加速就可以了,如图:

这里写图片描述

如果这个猪一样的队友写的报错界面太多了,你总不能一个一个去找吧,所以,就有第二种方法,直接修改SlidingMenu的源码

解决方法二:

直接将SlideMenu的代码设置为滑动时也不要开启硬件加速。具体代码很简单:

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void manageLayers(float percentOpen) {
if (Build.VERSION.SDK_INT < 11)
return;
//    boolean layer = percentOpen > 0.0f && percentOpen < 1.0f;
boolean layer=false;
final int layerType = layer ? View.LAYER_TYPE_HARDWARE
: View.LAYER_TYPE_NONE;
if (layerType != getContent().getLayerType()) {
getHandler().post(new Runnable() {
public void run() {
Log.v(TAG, "changing layerType. hardware? "
+ (layerType == View.LAYER_TYPE_HARDWARE));
getContent().setLayerType(layerType, null);
getMenu().setLayerType(layerType, null);
if (getSecondaryMenu() != null) {
getSecondaryMenu().setLayerType(layerType, null);
}
}
});
}
}

这种解决代码比较好,建议使用这一种代码。

android 解决华为 SlidingMenu出现白屏就讲完了。

就这么简单。

人已赞赏
Android文章

android GLSurfaceView渲染模式

2020-4-9 17:01:56

Android文章

android 判断进程是否处于前台

2020-4-9 18:17:01

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索