在使用MenuDrawer和WebView結合使用時,發現當關閉MenuDrawer菜單沒有選擇任何項時,在webview中顯示的內容會出現問題,View錯位(打開菜單時沒有顯示的區域仍是沒有顯示),通過找度娘,詢問谷哥,終於找到問題的癥結,最後爲View添加了一個關閉硬件加速,解決了問題。android
在Android 4.0的某些設備上,在View
刷新時會出現花屏和屏幕上的某些View錯位的現象。 通過調查後發現adb logcat
中出現不少OpenGLRenderer: 0x501
的錯位:web
09-18 14:34:39.090: DEBUG/OpenGLRenderer(3104): GL error from OpenGLRenderer: 0x501
app
從這個日誌,初步懷疑是硬件加速致使的問題。 通過分析發現使用了比較複雜的自定義View
,可能會致使硬件加速渲染出錯。測試
硬件加速能使用GPU來加速2D圖像的渲染速度,可是硬件加速並不能徹底支持全部的渲染操做, 針對自定義的View,硬件加速可能致使渲染出現錯誤。 若是有自定義的View,須要在硬件加速的設備上進行測試,若是出現渲染的問題,須要關閉硬件加速。spa
對硬件加速的開關能夠在不一樣的級別進行控制:日誌
在Applciation級別控制硬件加速的開關:code
<application android:hardwareAccelerated="true" ...>
能夠對單個的Activity
控制是否啓用硬件加速:xml
Window級別<application android:hardwareAccelerated="true"> <activity ... /> <activity android:hardwareAccelerated="false" /> </application>
View級別getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
在指定的View上關閉硬件加速:ci
或者使用來關閉硬件加速:myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
android:layerType="software"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="2dp" android:layerType="software" android:paddingRight="2dp" >