Создайте свой собственный класс, который расширяет WebView и переопределяет метод zoomOut ().Каждый раз, когда пользователь уменьшает масштаб, вызывайте super.zoomOut ().Сохраните то, что возвращается в логическую переменную с классом области видимости, чтобы его можно было сохранить с помощью onSaveInstanceState () или SharedPreferences, если необходимо.
public class MyWebView extends WebView {
// WebViews are generally zoomed out all the way when first created so set defaults
private boolean lastZoomInResult = true;
private boolean lastZoomOutResult = false;
@Override
public boolean zoomIn() {
lastZoomInResult = super.zoomIn();
return lastZoomInResult;
}
@Override
public boolean zoomOut() {
lastZoomOutResult = super.zoomOut();
return lastZoomOutResult;
}
РЕДАКТИРОВАТЬ: В ответ на это не работает длямасштабирование ... Вы совершенно правы, и в конечном итоге ответ Кристиана остается верным.
Я подключил свой телефон через USB к ПК с помощью DDMS.При увеличении масштаба я вижу следующее:
01-06 03:18:19.052: DEBUG/SurfaceFlinger(92): Layer::setBuffers(this=0x849ac0), pid=23072, w=1, h=1
01-06 03:18:19.052: DEBUG/SurfaceFlinger(92): Layer::setBuffers(this=0x849ac0), pid=23072, w=1, h=1
01-06 03:18:19.082: DEBUG/SurfaceFlinger(92): Layer::requestBuffer(this=0x849ac0), index=0, pid=23072, w=480, h=74 success
01-06 03:18:19.832: DEBUG/SurfaceFlinger(92): Layer::setBuffers(this=0x738378), pid=23072, w=1, h=1
01-06 03:18:19.832: DEBUG/SurfaceFlinger(92): Layer::setBuffers(this=0x738378), pid=23072, w=1, h=1
01-06 03:18:19.852: DEBUG/SurfaceFlinger(92): Layer::requestBuffer(this=0x738378), index=0, pid=23072, w=480, h=74 success
Короче говоря, это не WebView, который масштабирует.На самом деле происходит цифровой зум графического дисплея - содержимое WebView остается одинаковым по размеру независимо от увеличения или уменьшения масштаба, но при этом цифровое «увеличение» или «сжатие» аналогично цифровому зуму на цифровой камере.
Я не совсем понимаю, что такое SurfaceFlinger, но из быстрого поиска в Google мы говорим здесь о «драйвере устройства».
Единственное, что изменяется в этих сообщениях журнала SurfaceFlinger, это шестнадцатеричное значениедля «это =», и они не имеют отношения к состоянию масштабирования.Выше регистрируются две попытки сжатия, когда экран был полностью уменьшен.