Как отключить масштабирование одним касанием в Android WebView? - PullRequest
0 голосов
/ 10 сентября 2018

Я ищу решение для отключения масштабирования одним касанием (также известного как перетаскивание для увеличения или двойное нажатие для масштабирования) для Android WebView. Если вы не знакомы с этим жестом: дважды коснитесь экрана в WebView, а после второго касания удерживайте палец на экране и перетаскивайте его вверх-вниз, чтобы увеличить масштаб WebView.

Приложение находится в Xamarin C # с использованием WebView.

Следующий код отключает только другие типы масштабирования (двойной щелчок, масштабирование и увеличение):

Settings.SetSupportZoom(false);
Settings.BuiltInZoomControls = false;

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 11 сентября 2018

Эта функция не включена автоматически для веб-просмотра. Я думаю, что сама проблема заключается в веб-сайте. У меня есть решение, хотя.

Добавление TouchEvent к веб-представлению. Вы можете отключить любую форму взаимодействия с веб-представлением, установив для e.Handled значение true.

Я отслеживаю e.Handled через переменную «handled». Он становится равным true, когда вы дважды нажимаете, и возвращается в false, когда вы отпускаете палец на экране. Это приводит к тому, что веб-просмотр ничего не делает после двойного нажатия, пока вы не уберете палец с экрана.

var handled = false;

GestureDetector _gestureDetector = new GestureDetector(this, new GestureListener());

_gestureDetector.DoubleTap += (object sender, GestureDetector.DoubleTapEventArgs e) => {
    handled = true;
};

webView.Touch += (object sender, View.TouchEventArgs e) => {
    _gestureDetector.OnTouchEvent(e.Event);
    if (e.Event.Action == MotionEventActions.Up)
    {
        handled = false;
    }
    e.Handled = handled;
};

Вам необходимо добавить этот класс, чтобы включить функцию OnDoubleTap.

private class GestureListener : GestureDetector.SimpleOnGestureListener
{
    public override bool OnDoubleTap(MotionEvent e)
    {
        return true;
    }
}
...