ScrollView中的WebView似乎工作正常,但警告不使用 - 替代?

时间:2013-01-16 03:22:04

标签: android android-webview android-scrollview

我读过的所有东西(在已经制作我的应用程序之后:()表示类似“你永远不应该在ScrollView中使用WebView!”。这是可以理解的,因为理论上你可以有两个滚动的东西,这将使奇怪的可用性

但是 - 到目前为止,我没有看到任何不利影响。然后,我正在使用的每个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中这种情况有类似之处吗?得到上述内容的一种简单方法?

4 个答案:

答案 0 :(得分:4)

  

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

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

  

然后,我正在使用的每个WebView都不需要滚动

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

例如,DISQUS注释线程通常需要在桌面浏览器上滚动 。有人会想到会有足够长的注释线程来要求在移动设备上滚动,除非有一个可以使用的无滚动DISQUS嵌入。

  

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

删除所有内容并拥有一个WebView,生成的HTML内容包含当前结构中的所有内容。 IOW,做你在网站上做的事。

答案 1 :(得分:0)

不要使用WebView。 您可以附加到应用程序或使用AdMob的广告。 视频是VideoView。 评论webview的替代方法是make api(使用php [POST]和sql)。 使用webview不是必须的。 我希望我帮助

答案 2 :(得分:0)

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

  • WebView的高度(假设ScrollView可垂直滚动)是WRAP_CONTENT,
  • WebView具有固定大小,内容具有反应式布局,该布局永远不会大于视口(或者可以使用“overflow:hidden”)。

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

答案 3 :(得分:0)

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

我希望这能解决你的问题