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

Все, что я читал (ПОСЛЕ создания моего приложения :(), говорит что-то вроде «вы никогда не должны использовать WebView внутри ScrollView!». Это понятно, потому что теоретически у вас может быть 2 прокручиваемых элемента, которые сделают использование странным.

Но до сих пор я не видел никаких побочных эффектов. Опять же, каждый WebView, который я использую, не требует прокрутки — может быть, это делает его приемлемым для использования, хотя технически это неправильно?

Есть ли побочные эффекты, которые я просто не замечаю из-за отсутствия тестирования конкретной версии (версий)?

Если я не могу использовать WebView внутри ScrollView, как мне получить следующий макет (мое текущее приложение):

LinearLayout
    ScrollView
        LinearLayout
            TextView //Title of article
            TextView //Subtitle of article
            RelativeLayout
                ImageView //Large Image (clickable to gallery)
                ImageView //"more photos icon"
            WebView // a small horizontal ad
            TextView // actual article text
            WebView //embedded HTML code ranging from iframe to video...etc
            WebView //embedded HTML code ranging from iframe to video...etc
            WebView // a small horizontal ad
            LinearLayout
                TextView //DB-driven "similar articles" list
            WebView //disqus comments

Примечание. Я понимаю, что это «неправильно», но то же самое относится и к использованию тегов <center> в HTML, и люди все еще эффективно их используют. Разница, кажется, в том, что есть более простая и лучшая альтернатива <center> — есть ли что-то подобное для этого сценария в Android? Несколько простой способ получить вышеперечисленное?


person Dave    schedule 16.01.2013    source источник


Ответы (4)


Это понятно, потому что теоретически у вас может быть 2 элемента прокрутки, которые сделают использование странным.

В частности, ScrollView туп, как коробка с камнями, и предполагает, что имеет полный контроль над прокруткой.

Опять же, каждый WebView, который я использую, не требует прокрутки

Точнее, не требует прокрутки на протестированных вами устройствах и для протестированного контента.

Например, ветки комментариев DISQUS обычно требуют прокрутки в настольном браузере. Можно представить, что будут ветки комментариев, которые будут достаточно длинными, чтобы их можно было прокручивать на мобильном устройстве, если только нет встраивания DISQUS без прокрутки, которое вы можете использовать.

Если я не могу использовать WebView внутри ScrollView, как мне получить следующий макет (мое текущее приложение):

Избавьтесь от всего и получите единый WebView со сгенерированным HTML-содержимым, содержащим все содержимое вашей текущей структуры. IOW, делайте то же, что и на веб-сайте.

person CommonsWare    schedule 23.01.2013
comment
Когда у меня есть ImageViews, довольно легко обнаружить клики... если они HTML, как бы я с этим справился? - person Dave; 29.01.2013
comment
(код disqus, который я использую, кажется, не содержит прокрутки, так как есть много комментариев, и все еще нет прокрутки - хотя мне все еще нравится идея использования всего сгенерированного HTML - просто я не уверен в нескольких вещах, таких как клики по изображению. ..и т.д) - person Dave; 29.01.2013
comment
@Dave: если это HTML, как мне с этим справиться? -- эммм... Атрибуты onclick, вызывающие объекты Java, введенные через addJavaScriptInterface(), были бы тем, с чего я бы начал. - person CommonsWare; 29.01.2013

Не используйте веб-просмотр. Объявления, которые вы можете прикрепить к приложению или использовать AdMob. Для видео есть VideoView. Альтернативой веб-просмотру комментариев является make api (используя php [POST] и sql). Использование веб-просмотра не является обязательным. надеюсь я помог

person TN888    schedule 21.01.2013
comment
Admob предназначен специально для Google — мы не размещаем рекламу через них. Комментарии отправляются через Disqus, в котором есть HTML-код для реализации. Я ценю ваше время, но я не верю, что это то, что я ищу. - person Dave; 22.01.2013

Размещение WebView в ScrollView будет работать до тех пор, пока WebView не прокручивается внутри в том же направлении, что и ScrollView. Заставить WebView не прокручиваться внутри можно двумя способами:

  • высота WebView (при условии, что ScrollView прокручивается по вертикали) равна WRAP_CONTENT,
  • WebView имеет фиксированный размер, а содержимое имеет реактивный макет, который никогда не будет больше области просмотра (в качестве альтернативы можно использовать «переполнение: скрытый»).

Я не думаю, что описанные выше подходы будут хорошо сочетаться с масштабированием, поэтому вам лучше не включать его.

person marcin.kosiba    schedule 11.11.2013

Создайте класс Java и расширяйте его с помощью WebView

package com.mypackage.common.custom.android.widgets

public class TouchyWebView extends WebView {

     public TouchyWebView(Context context) {
        super(context);
     }

    public TouchyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

  public TouchyWebView(Context context, AttributeSet attrs, int defStyle) {
     super(context, attrs, defStyle);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event){
     requestDisallowInterceptTouchEvent(true);
     return super.onTouchEvent(event);
  }          
}

и в макете

<com.mypackage.common.custom.android.widgets
      android:id="@+id/webView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

Я надеюсь, что это решит вашу проблему

person hardik sojitra    schedule 19.04.2018