HTC One X – Webview在触摸后变为白色/空白

我有一个Android应用程序,其中包含search文本框,一些button,webviews(1可见2不可见)和admob adview。 该应用程序只是在一些特殊的网站上search,它在仿真器,三星Galaxy设备上效果很好。 但我有问题与HTC One X(不知道其他HTC型号)。

问题是,当你点击一个searchbutton时,webview加载页面。 然后“有时”,当你尝试触摸甚至滚动,webview只是返回到完全白色的区域与滚动条。 这在广告刷新之后尤其会发生。 即使有时候,广告的背景和文字区域也会变成白色,因此也不可读。 在广告只是蓝色的箭头和蓝色的电话图像保持可见!

有没有人有这样的问题,和任何解决scheme? 提前致谢。

这里是我的布局xml:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/layoutDashboard" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@drawable/border_shape" android:orientation="vertical" android:paddingTop="1sp" > <EditText android:id="@+id/editxtKeyword" android:layout_width="fill_parent" android:layout_height="43dp" android:layout_marginLeft="1dp" android:layout_marginRight="1dp" android:layout_marginTop="2dp" android:ems="10" android:hint="@string/editxtKeyword_hint" android:singleLine="true" > </EditText> <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_gravity="center_vertical" android:layout_weight="0.30" android:paddingBottom="2dp" android:paddingLeft="1dp" android:scrollbars="none" > <LinearLayout android:id="@+id/layoutButtons" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center_vertical" android:layout_marginTop="0dp" android:layout_marginBottom="1dp" android:layout_marginLeft="1dp" android:layout_marginRight="1dp" android:orientation="horizontal" > < <Button android:id="@+id/btnAk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="1dp" android:background="@drawable/custom_button_shape" android:text="asd" /> <Button android:id="@+id/btnCm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="1dp" android:background="@drawable/custom_button_shape" android:text="csm" /> </LinearLayout> </HorizontalScrollView> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/webV" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/linlaylay1" android:visibility="visible" /> <WebView android:id="@+id/webVAnalytics" android:layout_width="1dp" android:layout_height="0dp" android:visibility="invisible" /> <WebView android:id="@+id/WebVSahibinden" android:layout_width="1dp" android:layout_height="0dp" android:visibility="invisible" /> <LinearLayout android:id="@+id/linlaylay1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_margin="0dp" android:orientation="vertical" android:padding="0dp" > <com.google.ads.AdView android:id="@+id/adViewSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" ads:adSize="BANNER" ads:adUnitId="a123123" ads:loadAdOnCreate="true" ads:testDevices="TEST_EMULATOR" /> </LinearLayout> </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/layoutProgress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|center_horizontal" android:layout_marginBottom="50dp" android:layout_marginTop="5dp" android:background="@drawable/progress_shape" android:padding="2dp" android:visibility="invisible" > <TextView android:id="@+id/lblLoading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" android:text="@string/msg_loading" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" /> <ImageButton android:contentDescription="@string/dialog_cancel" android:id="@+id/btnStop" android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/stop" /> </LinearLayout> </FrameLayout> 

Solutions Collecting From Web of "HTC One X – Webview在触摸后变为白色/空白"

在显示硬件加速视图时,存在很多问题。 我会重做你的布局,不要重叠网页视图或滚动视图,或禁用硬件加速。

一个已知的错误

您可以禁用WebView上的硬件加速,但一定要以不破坏旧设备的方式进行:

 if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB){ //mWebView is some WebView mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } 

注意事项

  • video将不会在浏览器中播放
  • 滚动不会一样顺利

这是根据错误在果冻豆固定,但我没有能够亲自validation。

我在HTC手机上看到过这个问题。 这个bug线程中的一个注释提供了一些build议来帮助优化WebView的性能。 该错误是关于3D转换,但我发现评论的技术一般是有用的WebViews。

一般来说,在Google I / O 2012上的这个演示文稿还提供了关于WebViews的一些好的信息。

两者都表明dynamic内容被放置在“图层”上。 这意味着将这个CSS规则分配给元素:

  -webkit-transform: translate3d(0, 0, 0); 

通过应用这个规则,Android“告诉浏览器预先将图层复合到自己的纹理上,这样它就可以稍后(几乎)释放”。这种行为不是免费的 – 它可以消耗更多的内存,所以我会审慎地应用它。 上面链接的演示很好地解释了原因。

就我而言,我可以通过将这个规则应用到包装整个页面的DIV来避免“白屏”。 页面有时会呈现白色一秒钟,然后呈现内容。 我还没有看到这个“白色”页面像我在应用这个技术之前那样永远持续下去。 我没有看到失控的内存消耗。 因人而异。

我也build议你尽可能简化你的布局。 说起来容易做起来难,但是一些好的build议可以在文档中find。