2012-02-22 30 views
8

Tôi đang cố sử dụng phương thức scrollTo của chế độ xem web. Đây là tệp bố cục của tôi cho chế độ xem web.Cuộn qua WebViewĐể không hoạt động

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
<WebView 
    android:id="@+id/webMap" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 
</LinearLayout> 

Những gì tôi đang cố gắng để làm là thể hiện một file html (trong đó có duy nhất một hình ảnh bản đồ) và di chuyển đến khu vực nhất định trên hình ảnh với:

mapWebView.loadUrl("file:///android_asset/maps/map.html"); 
mapWebView.scrollTo(300, 300); 

Nhưng khi webview được nạp nó luôn hiển thị (0, 0) của hình ảnh.

Sự cố với scrollTo() ở đây là gì?

+0

Hãy xem @ http://stackoverflow.com/questions/22737412/android-webview-scrollto-is-not-working/22920457#22920457 –

Trả lời

16

Tôi nghi ngờ rằng mapWebView.loadUrl("file:///android_asset/maps/map.html"); là không đồng bộ, do đó, mapWebView.scrollTo(300, 300); sẽ thực hiện trước khi chế độ xem web đã tải xong. Khi trang tải nó sẽ mất cài đặt cuộn bạn đã áp dụng và sẽ được đặt lại ở trên cùng.

Bạn cần phải lắng nghe cho việc tải trang và sau đó di chuyển nó:

mapWebView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 
      mapWebView.scrollTo(300, 300); 
     } 

    } 
    ); 

Hope this helps

EDIT: Hóa ra đây là không đáng tin cậy, sử dụng này để thay thế:

mapWebView.setPictureListener(new PictureListener() { 

     @Override 
     public void onNewPicture(WebView view, Picture picture) { 
      mapWebView.scrollTo(300, 300); 

     } 
    }); 
+0

Cảm ơn cho câu trả lời Dean. Tôi cũng đã thử nó, nhưng vẫn không hoạt động. Tuy nhiên, sau khi scrollTo() tôi gọi getScrollX() và getScrollY() để xem chúng quay trở lại và nó là (300, 300). Nhưng hình ảnh vẫn còn trên (0, 0). – penguru

+0

Hãy thử mã khác tôi đã đăng, trông giống như phương thức tải đã hoàn thành đôi khi kích hoạt trước khi trang thực sự được tải đặc biệt nếu bạn có hình ảnh mà bạn làm –

+2

Cảm ơn Dean, setPictureListener hoạt động tuyệt vời! – penguru

1

Hãy thử điều này ..:

try { 
webview.setWebChromeClient(new WebChromeClient() { 

    @Override 
    public void onProgressChanged(WebView view, 
      int newProgress) { 

     if (newProgress >= 100) { 

      webview.scrollTo(x,y); 
     } 

     super.onProgressChanged(view, newProgress); 
    }; 

}); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
0

Ghi đè sau hoạt động tốt hơn cho tôi.

protected void onLayout(boolean changed, int l, int t, int r, int b) { 
// set initial scroll to 
scrollTo(yourXpos,yourYpos); 
super.onLayout(changed, l, t, r, b); 
} 
Các vấn đề liên quan