【问题标题】:WebView inside ScrollView seems to work fine, but warnings to not use - alternative?ScrollView 中的 WebView 似乎工作正常,但警告不要使用 - 替代方案?
【发布时间】:2013-01-16 03:22:04
【问题描述】:

我读过的所有内容(在制作我的应用程序之后 :( )都说“你永远不应该在 ScrollView 中使用 WebView!”。这是可以理解的,因为理论上你可以有 2 个滚动的东西,这会产生奇怪的可用性.

但是 - 到目前为止,我没有看到任何不利影响。再说一次,我使用的每个 WebView 都不需要滚动——也许这使得它可以接受——即使它在技术上是错误的?

是否存在由于缺乏对特定版本的测试而我没有注意到的不利影响?

如果我不能在 ScrollView 中使用 WebView,我将如何获得以下布局(我当前的应用程序):

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

注意:我意识到这是“错误的”——但在 HTML 中使用 <center> 标签也是如此,人们仍然一直有效地使用它们。不同之处似乎在于<center> 有一个简单且更好的替代方案 - Android 中的这种情况是否有类似的东西?获得上述内容的某种简单方法?

【问题讨论】:

    标签: android android-webview android-scrollview


    【解决方案1】:

    这是可以理解的,因为理论上你可以有 2 个滚动的东西,这会导致奇怪的可用性。

    更具体地说,ScrollView 就像一盒石头一样愚蠢,并假设它可以完全控制滚动。

    再说一次,我使用的每个 WebView 都不需要滚动

    更准确地说,它不需要在您测试过的设备和您测试过的内容上滚动。

    例如,DISQUS 评论线程通常需要在桌面浏览器上滚动。可以想象会有足够长的评论线程需要在移动设备上滚动,除非您可以使用无滚动的 DISQUS 嵌入。

    如果我不能在 ScrollView 中使用 WebView,我将如何获得以下布局(我当前的应用程序):

    摆脱一切,拥有一个 WebView,生成的 HTML 内容包含您当前结构中的所有内容。 IOW,做你在网站上会做的事情。

    【讨论】:

    • 当我有 ImageViews 时,很容易进行点击检测...如果它们是 HTML,我将如何处理?
    • (我使用的 disqus 代码似乎是无滚动的,因为有很多 cmets,但仍然没有滚动 - 尽管我仍然喜欢使用所有生成的 HTML 的想法 - 只是不确定关于一些事情,比如图片点击......等等)
    • @Dave:“如果它们是 HTML,我将如何处理?” -- 嗯...onclick 属性,调用通过addJavaScriptInterface() 注入的 Java 对象,这将是我开始的地方。
    【解决方案2】:

    不要使用 WebView。 您可以附加到应用程序或使用 AdMob 的广告。 视频是 VideoView。 cmets webview 的替代方法是 make api(使用 php [POST] 和 sql)。 使用 webview 不是强制性的。 希望能帮到你

    【讨论】:

    • Admob 专门为 Google 服务 - 我们不会通过它们投放广告。评论是通过 Disqus,它有 HTML 代码来实现。感谢您的宝贵时间,但我认为这不是我要找的。​​span>
    【解决方案3】:

    只要 WebView 不能在与 ScrollView 相同的方向上进行内部滚动,将 WebView 放置在 ScrollView 中就可以工作。使 WebView 在内部不滚动可以通过以下几种方式实现:

    • WebView 的高度(假设 ScrollView 可垂直滚动)为 WRAP_CONTENT,
    • WebView 具有固定大小,内容具有反应式布局,永远不会大于视口(也可以使用“溢出:隐藏”)。

    我认为上述方法不能很好地与捏缩放混合,所以你最好不要启用它。

    【讨论】:

      【解决方案4】:

      创建一个 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" />
      

      希望能解决你的问题

      【讨论】:

        猜你喜欢
        • 2022-06-24
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多