7

私のAndroidアプリケーションでは、ユーザーはViewPagerを使用していくつかのHTMLページを参照でき、ユーザーは要素をタッチして強調表示できます。

問題は、次のコードを使用してjavascriptを使用してtouchイベントを取得しようとすると、新しいページに移動するとelementFromPointがnullを返しますが、ユーザーがページをズームまたはスクロールすると、正しく機能します。

タッチスタートイベントの登録は、ページをズームまたはスクロールした後に発生することがわかりました。そのため、$(document).ready()に登録されていても、その直後に機能します。

        $(document).ready(function(){
            document.addEventListener("touchstart", touchstart, false);     
        });     

        function touchstart(e) {                              
            var x = e.targetTouches[0].clientX; 
            var y = e.targetTouches[0].clientY;                             
             el = document.elementFromPoint(x, y);  
            }

ありがとうございました

4

2 に答える 2

7

javascript を呼び出した後、Java コードに次のコードを記述します。

    myWebview.scrollTo(1, 0);
    myWebview.scrollTo(0, 0);

または、ズームインしてからズームアウトします

    myWebview.zoomIn();
    myWebview.zoomOut();
于 2013-01-29T07:43:03.767 に答える
0

以下の Mohamed Abdel Latif のソリューション (明らかに、これは別の不十分な WebView バグです) を使用することで、Android 4.1.2 で修正されました。注: Android 4.4.2 でこれをテストしましたが、この hack-to-fix-a-bug は必要ありません。

@Override
public void onCreate(Bundle savedInstanceState)
{

    final WebView myWebView = (WebView) findViewById(R.id.mywebview);
    myWebView.setHorizontalScrollBarEnabled(false);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadDataWithBaseURL("file:///android_asset/", YOUR_HTML_GOES_HERE, "text/html", "utf-8", null);

    myWebView.setWebViewClient(new WebViewClient()
    {
        // overcome the ontouchstart registration bug !
        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            final WebView myWebView = (WebView) findViewById(R.id.mywebview);
            myWebview.scrollTo(1, 0);
            myWebview.scrollTo(0, 0);
        }
    });
}
于 2014-02-20T19:48:31.140 に答える