2013-04-18 20 views
8

WebView.getScale() bị phản đối (nhưng vẫn có thể sử dụng)Làm thế nào có được quy mô webview trong Android 4

Cách khuyến khích để có được quy mô cho webview là sử dụng WebViewClient.onScaleChanged() http://developer.android.com/reference/android/webkit/WebViewClient.html#onScaleChanged(android.webkit.WebView, float, float)

tôi đã thêm tương ứng xử lý trong webview tùy chỉnh của tôi:

public class CustomWebView extends WebView { 

public CustomWebView(Context context) { 
    super(context); 
    setWebViewClient(new WebViewClient() { 
     @Override 
     public void onScaleChanged(WebView view, float oldScale, float newScale) { 
      super.onScaleChanged(view, oldScale, newScale); 
      currentScale = newScale 
     } 
    }); 
} 

Và bây giờ vấn đề: phương pháp không gọi (ít nhất là trên mối quan hệ của tôi 7) nếu tôi phóng to/thu nhỏ bằng nhúm, vì vậy nó hoạt động tốt chỉ khi tôi sử dụng điều khiển thu phóng nhưng tấn.

+0

Bạn có tìm thấy câu trả lời ngay bây giờ không? Tôi có cùng một vấn đề. –

+0

Đã không tìm cách để bắt quy mô thay đổi ngay cả, nhưng mục tiêu của tôi là theo dõi quy mô hiện tại, vì vậy tôi đã buộc phải sử dụng WebView.getScale() thay vì tiếp cận quy mô người nghe. Nếu bạn cần theo dõi sự kiện thay đổi tỷ lệ trên webview, hãy thử đặt trình dò ​​cử chỉ tùy chỉnh thành chế độ xem web và chỉ cần theo dõi sự kiện pinch. Đừng chắc chắn nó sẽ hoạt động, chỉ cần ý tưởng. – abovesun

+0

Tôi chưa có giải pháp (và tôi không nghĩ rằng có một giải pháp trực tiếp nào sau đây), nhưng tôi đã phát hiện ra lý do: cuộc gọi lại 'ScaleDetectorListener.onScaleEnd' trong' WebView' (và sau đó là 'ZoomManager 'helper class) kết quả trong' setNewZoomScale' (cho phiên bản 'WebKit') hoặc' setZoomScale' (cho phiên bản 'ZoomManager') được gọi với thang đo' mActualScale', và những phương thức đó sẽ chỉ kích hoạt 'onScaleChanged' khi cung cấp scale không bằng 'mActualScale' (có một yêu cầu'! mPreviewZoomOnly' khác, nhưng cái đó được thỏa mãn là 'onScaleEnd' đặt nó thành' false'). – JAB

Trả lời

1

thử:

public MyWebView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
    setWebViewClient(new WebViewClient() { 
     @Override 
     public void onScaleChanged(WebView view, float oldScale, float newScale) { 
      super.onScaleChanged(view, oldScale, newScale); 
      currentScale = newScale; 
     } 
    }); 
} 
+3

cách điều này khác với mã tôi đã putted ở trên? – abovesun

+2

tham số hàm tạo: MyWebView (Ngữ cảnh bối cảnh, AttributeSet attrs) –

3

Tôi đang phát triển cho cấp API 17 và tôi đã kết thúc bằng cách sử dụng phương pháp phản getScale() với lý do tương tự. WebViewClient.onScaleChanged() chỉ đơn giản là không được kích hoạt khi tôi thay đổi tỷ lệ bằng cách sử dụng pinch zoom trong WebView. Tôi có GestureListener tùy chỉnh trong WebView mở rộng của mình hoạt động khác khi chế độ xem được phóng to (tỷ lệ 1.0+). Tôi không thể nhận được giá trị quy mô phù hợp một cách đáng tin cậy khi tôi đặt biến lớp trong onScaleChanged().