android 解决华为 SlidingMenu出现白屏
SlidingMenu在華為手機(jī)上出現(xiàn)的白屏。
之前做了一個(gè)自定義的Monitor,用來播放視頻,但是在華為手機(jī)上,每次滑動(dòng)SlideMenu后,Monitor會(huì)出現(xiàn)白屏,之前一直不知道為什么。后來,在網(wǎng)上搜索了資料,終于解決了問題。
問題原因是由于SlidingMenu滑動(dòng)時(shí)開啟了硬件加速,但是在華為手機(jī)上沒有很好的兼容。具體代碼是:
@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); }}}); } }這段代碼的含義是,當(dāng)滑動(dòng)時(shí),菜單和內(nèi)容都開啟硬件加速,滑動(dòng)結(jié)束后,取消硬件加速。解決問題也很簡(jiǎn)單。
解決方法一:
第一種解決方法是關(guān)閉硬件加速
在AndroidManifest.xml文件中在application標(biāo)簽中添加屬性 android:hardwareAccelerated=”false”,如圖:
但是,這種方法有個(gè)缺點(diǎn),就是開啟了硬件加速之后,如果碰到非常復(fù)雜的界面布局,嵌套太多的話,就會(huì)報(bào)StackOverflow的錯(cuò)誤,可以自己百度一下,如果你恰好遇到一個(gè)喜歡留個(gè)FrameLayout,然后在代碼里面不停的removeAllView()、addView(),動(dòng)態(tài)添加布局的豬一樣的隊(duì)友,那么恭喜你,很有可能遇到我說的情況。順便說一下,優(yōu)雅的解決復(fù)雜布局的方法是用多個(gè)Fragment來拆開復(fù)雜界面、分離頁面邏輯
萬一你遇到開啟硬件加速后,復(fù)雜界面報(bào)錯(cuò)的情況怎么辦呢?別著急,臨時(shí)關(guān)閉硬件加速就可以了,告訴機(jī)器,這個(gè)界面不要硬件加速。
首先找到報(bào)錯(cuò)的那個(gè)界面,例如MainActivity,然后設(shè)置這個(gè)Activity的屬性,針對(duì)這個(gè)Activity不要使用硬件加速就可以了,如圖:
如果這個(gè)豬一樣的隊(duì)友寫的報(bào)錯(cuò)界面太多了,你總不能一個(gè)一個(gè)去找吧,所以,就有第二種方法,直接修改SlidingMenu的源碼
解決方法二:
直接將SlideMenu的代碼設(shè)置為滑動(dòng)時(shí)也不要開啟硬件加速。具體代碼很簡(jiǎn)單:
@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出現(xiàn)白屏就講完了。
就這么簡(jiǎn)單。
總結(jié)
以上是生活随笔為你收集整理的android 解决华为 SlidingMenu出现白屏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android TextUtils的使用
- 下一篇: android 判断进程是否处于前台