日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 解决华为 SlidingMenu出现白屏

發(fā)布時(shí)間:2024/4/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 解决华为 SlidingMenu出现白屏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天,講講如何處理 

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。