8

検索用のテキスト ボックス、いくつかのボタン、Web ビュー (1 つは表示され、2 つは非表示)、および admob adview を備えた Android アプリケーションがあります。アプリはいくつかの特別なサイトを検索するだけで、エミュレーター、サムスン Galaxy デバイスでうまく機能します。しかし、私は HTC One X に問題があります (他の HTC モデルについては知りません)。

問題は、検索ボタンをクリックすると、webview がページをロードすることです。次に、「時々」スクロールしてもタッチしようとすると、Webビューはスクロールバーのある完全に白い領域に戻ります。これは、特に広告の更新後に発生します。広告の背景とテキスト領域が完全に白くなり、読めなくなることもあります。広告では、青い矢印と青い電話の画像だけが表示されたままです!

誰かがこのような問題を抱えていますか、そして解決策はありますか? 前もって感謝します。

ここに私のレイアウト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>
4

3 に答える 3

2

ハードウェア アクセラレーション ビューを重ねて表示する場合、多くの問題があります。Web ビューやスクロール ビューをオーバーラップさせたり、ハードウェア アクセラレーションを無効にしたりしないように、レイアウトを作り直します。

于 2012-06-24T13:36:20.413 に答える
2

既知のバグ

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);
}

注意事項

  • 動画がブラウザで再生されない
  • スクロールはそれほどスムーズではありません

これは、バグによると Jelly Bean で修正されていますが、個人的には確認できていません。

于 2012-08-02T19:43:23.523 に答える
1

HTC電話の単一のWebビューでこの問題が発生しました。 このバグスレッドのコメントの1つは、 WebViewのパフォーマンスを最適化するのに役立ついくつかの提案をしています。バグは3D変換に関するものですが、コメントの手法はWebView全般に役立つことがわかりました。

Google I / O 2012でのこのプレゼンテーションでは、一般的なWebViewのトピックに関するいくつかの優れた情報も提供されます。

どちらも、動的コンテンツを「レイヤー」に配置することを提案しています。これは、このCSSルールを要素に割り当てることを意味します。

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

このルールを適用することにより、Androidは「レイヤーを独自のテクスチャに事前に合成するようにブラウザに指示し、後で(ほぼ)無料でアニメーション化できるようにします」この動作は無料ではありません。より多くのメモリを消費する可能性があるため、慎重に適用します。上にリンクされたプレゼンテーションは、その理由を説明するのに役立ちます。

私の場合、このルールをページ全体をラップするDIVに適用することで、「白い画面」を回避することができました。ページが1秒間白く表示されてから、コンテンツが表示されることがあります。このテクニックを適用する前のように、「白い」ページが永遠に続くのを見たことがありません。制御不能なメモリ消費は見られませんでした。YMMV。

また、レイアウトを簡素化するためにできることを行うことをお勧めします。言うのは簡単ですが、いくつかの良い提案がドキュメントにあります。

于 2012-08-02T18:14:53.390 に答える