Android: Flash-контент нарушает границы WebView и перекрывает собственные элементы макета - PullRequest
10 голосов
/ 11 декабря 2010

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

Протестировано с: Android 2.2 и Flash 10.1.

Это известная ошибка в Adobe Flash Player 10.1?

Ответы [ 4 ]

4 голосов
/ 26 июля 2012

У меня была такая же проблема со вспышкой.Что я обнаружил, так это то, что Flash View добавляется с setZOrderOnTop, установленным в true.Это приводит к тому, что flash отображается поверх всех окон (например, покрывает другие собственные элементы макета).

У меня был свой собственный класс WebView, и я переопределил методы addView.Когда WebView добавляет любое представление, я проверяю, является ли оно представлением во флэш-памяти (проверяя «com.adobe.flashplayer.FlashPaintSurface»).Если это так, я устанавливаю Z order на false:

@Override
public void addView(View child, int index)
{
    if (child.getClass().getName().equals("com.adobe.flashplayer.FlashPaintSurface"))
    {
        ((SurfaceView)child).setZOrderOnTop(false);
    }

    super.addView(child, index);
}

Я делаю это для каждого метода addView.Это работает для меня, и я думал, что я поделюсь им.

3 голосов
/ 13 декабря 2010

Я нашел это (6 месяцев) сообщение об ошибке Android: http://code.google.com/p/android/issues/detail?id=8938 К сожалению, пока нет решений, обходных путей или комментариев.

В багтрекере Adobe я обнаружил похожую ошибку (https://bugs.adobe.com/jira/browse/FP-4684) со следующим комментарием:

Поведение, которое вы описываете известная проблема во Flash Player 10.1 на платформа Android. Сегодня Flash всегда будет отображаться поверх HTML содержание. Кроме того, когда две части Flash-содержимое перекрывается, порядок, в котором они оказываются непредсказуема.

Для исправления этой проблемы потребуется обновления с Android и Flash Player команды, и будет адресовано в будущем выпуске.

1 голос
/ 15 января 2013

Я столкнулся с этим вопросом сегодня.Я тестировал на 2.3.6 с более старой встроенной вспышкой.Мне понравилось решение pzyho как быстрое решение, но я не хотел расширять WebView и должен был внести существенные изменения в существующий код.Более быстрым решением было использование setOnHierarchyChangeListener для любого заданного WebView.

myWebView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {  
        @Override
        public void onChildViewRemoved(View parent, View child) {}
        @Override
        public void onChildViewAdded(View parent, View child) {
            if(child.getClass().getName().equals("com.adobe.flashplayer.FlashPaintSurface"))
                ((SurfaceView)child).setZOrderOnTop(false); 
        }
});
0 голосов
/ 01 марта 2012

Если возможно отказаться от содержимого Flash, вы можете просто использовать Websettings , чтобы отключить поддержку плагина.

    webView = (WebView) findViewById(R.id.webview);
    WebSettings settings = webView.getSettings();
    // deprecated only for API < 8
    settings.setPluginsEnabled(false);
    // for API > 8 recommended
    settings.setPluginState(PluginState.OFF);

Если этот код не отключает флэш-плагин иВы хотите запустить свое приложение vor API <8, просто удалите ... </p>

   settings.setPluginsEnabled(true);

... если вы используете его в своих настройках Web без настроек bool на false - это сработало для меня!Я знаю, что такой подход не всегда является решением, но в моем случае это сработало, потому что флэш-контент был просто неважным баннером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...