WebView.getScale() jest przestarzała (ale nadal użyteczny)Jak dostać Webview skalę w Androidzie 4
Zalecanym sposobem, aby uzyskać skalę dla WebView jest użycie WebViewClient.onScaleChanged() http://developer.android.com/reference/android/webkit/WebViewClient.html#onScaleChanged(android.webkit.WebView, float, float)
Dodałem odpowiadające obsługi w moim niestandardowego WebView:
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
}
});
}
I teraz problem: metoda nie wywoływany (przynajmniej na moim Nexus 7) jeśli jestem zoom in/zoom przy użyciu szczyptę, więc działa dobrze tylko wtedy, gdy używam regulacji zoomu, ale tona.
Czy znalazłeś już odpowiedź? Mam ten sam problem. –
Nie znalazłem sposobu na zmianę skalowania, ale moim celem było śledzenie aktualnej skali, więc musiałem użyć wycofanego podejścia WebView.getScale() zamiast skalowania. Jeśli chcesz śledzić zdarzenie zmiany skali w widoku internetowym, spróbuj ustawić niestandardowy detektor gestów na widok internetowy i po prostu śledź zdarzenia szczypania. Nie wiem, czy to zadziała, po prostu pomysł. – abovesun
Nie mam jeszcze rozwiązania (i nie sądzę, że jest podany poniżej), ale odkryłem przyczynę: wywołanie zwrotne 'ScaleDetectorListener.onScaleEnd' w' WebView' (i później 'ZoomManager 'helper class) powoduje, że' setNewZoomScale' (dla 'wersji WebKit') lub' setZoomScale' (dla wersji 'ZoomManager') jest wywoływane ze skalą' mActualScale', a metody te będą wyzwalać tylko 'onScaleChanged', gdy dostarczone zostaną skala nie jest równa 'mActualScale' (jest jeszcze jedno wymaganie'! mPreviewZoomOnly', ale ta jest spełniona, ponieważ 'onScaleEnd' ustawia ją na 'false'). – JAB