Как отключить сообщение тоста, которое иногда появляется с помощью элементов управления масштабированием в WebView?

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

Я не знаю, как его воспроизвести, но, похоже, это происходит чаще, когда приложение только что установлено.

Ответ 1

Как указано в ответе wajiw, тост основан на подсчете тостов двойного крана в WebSettings. Существует обходное решение, основанное на вытеснении этой ценности. WebSettings получает значение для двойного подсчета тостов из SharedPreferences. Переопределение значения предпочтений приведет к отключению тоста.

Предпочтения основаны на частных значениях в WebSettings, поэтому они не идеальны. Если реализация изменится, это вполне может прекратить работу. Таким образом, используйте на свой страх и риск.

Вот значения, которые использует WebSettings для SharedPreferences. Вам нужно будет дублировать их в своем классе.

private static final String PREF_FILE = "WebViewSettings";
private static final String DOUBLE_TAP_TOAST_COUNT = "double_tap_toast_count";

Затем вам нужно будет изменить значения, прежде чем использовать WebView

SharedPreferences prefs = context.getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
if (prefs.getInt(DOUBLE_TAP_TOAST_COUNT, 1) > 0) {
    prefs.edit().putInt(DOUBLE_TAP_TOAST_COUNT, 0).commit();
}

Подробнее о Исходный код WebSettings.

Ответ 2

От взгляда на источник WebView.java он поступает из функции startDrag:

private void startDrag() {
        WebViewCore.reducePriority();
        // to get better performance, pause updating the picture
        WebViewCore.pauseUpdatePicture(mWebViewCore);
        if (!mDragFromTextInput) {
            nativeHideCursor();
        }
        WebSettings settings = getSettings();
        if (settings.supportZoom()
                && settings.getBuiltInZoomControls()
                && !getZoomButtonsController().isVisible()
                && mMinZoomScale < mMaxZoomScale
                && (mHorizontalScrollBarMode != SCROLLBAR_ALWAYSOFF
                        || mVerticalScrollBarMode != SCROLLBAR_ALWAYSOFF)) {
            mZoomButtonsController.setVisible(true);
            int count = settings.getDoubleTapToastCount();
            if (mInZoomOverview && count > 0) {
                settings.setDoubleTapToastCount(--count);
                Toast.makeText(mContext,
                        com.android.internal.R.string.double_tap_toast,
                        Toast.LENGTH_LONG).show();
            }
        }
    }

настройки доступны через getSettings(). Оттуда я попытался бы вызвать setDoubleTapToastCount и использовать значение 0 или -1 для значения. Если это не сработает, вам может быть не повезло.

Смотрите полный источник WebView.java здесь