2012-09-24 50 views
5

Tôi có:
Hiện tại tôi có chế độ xem Cuộn làm cha mẹ. Bên trong khung nhìn cuộn này, tôi đang sử dụng một WebView tải một URL và sau đó hiển thị văn bản trong đó. Đây là xml của tôi:Cuộn chế độ xem web bên trong Chế độ xem cuộn

<ScrollView 
    android:id="@+id/parentScroll" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/Heading" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" > 

     <WebView 
      android:id="@+id/webView" 
      android:layout_width="match_parent" 
      android:layout_height="300dp" 
      android:background="@drawable/webview" /> 
    </RelativeLayout> 
</ScrollView>  

Những gì tôi muốn:
Tôi muốn di chuyển WebView bên trong nó. Khi tôi chạm vào webView, rất tiếc, chế độ xem cuộn bố mẹ được gọi. Tôi cũng phải giữ chế độ xem Cuộn phụ, nhưng bên cạnh đó, tôi muốn cuộn nội dung WebView bên trong khi tôi chạm vào webView.

Tôi làm cách nào để thực hiện việc này?

Trả lời

4

Theo tài liệu thiết kế Android, bạn không bao giờ nên đặt vùng chứa cuộn bên trong vùng chứa cuộn nếu chúng cuộn cùng một hướng. Nó không có nghĩa là để xử lý một điều như vậy.

+2

@CaseyB ... Nhưng yêu cầu của tôi của nó. tôi phải giữ webView trong chế độ xem cuộn. U có ý tưởng gì về điều này không ?? – Noman

+2

Sau đó, tôi sợ yêu cầu của bạn là sai, bạn không bao giờ cần phải làm điều này. –

+0

@JosephEarl .. ok sau đó tôi cố gắng thay đổi thiết kế. Nó khó khăn cho tôi .. – Noman

0

Tiện ích có thể cuộn lồng nhau thường không được khuyến khích. Đó là một trải nghiệm người dùng khó hiểu bởi vì thật dễ dàng để cuộn nhầm. Nói rằng tôi có ý định di chuyển vùng cuộn bên ngoài nhưng tôi chạm vào vùng bên trong đầu tiên và vất vả thực sự khó khăn. Sau đó, một bên trong sẽ di chuyển và tôi sẽ giống như huh? Tại sao nó không di chuyển?

Thậm chí nếu một cuộn ngang và chiều ngang khác là dọc, công cụ nhận dạng cử chỉ có thể gây nhầm lẫn cho người nhận khác để bạn có được hiệu ứng tương tự. Đó là một trường hợp sử dụng hợp lệ nhưng nó vẫn còn iffy và tôi muốn tránh nó. (IE: Con người không hoàn toàn vuốt theo chiều dọc và chiều ngang đúng cách, thường là với một góc.)

Tôi sẽ đẩy để thay đổi thiết kế để thoát ra khỏi khu vực có thể cuộn. Lý tưởng nhất là 1 mục có thể cuộn trên mỗi trang. Ngay cả đề xuất một mình và cung cấp cho nhà thiết kế cả hai kinh nghiệm và xem cái nào họ chọn.

Để diễn tả cách điều này sẽ hút. Hãy xem ví dụ này. Đây không phải là giải pháp mà chỉ để thể hiện trải nghiệm.

<ScrollView 
    android:id="@+id/parentScroll" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/Heading" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" android:orientation="vertical" 
    android:padding="5dp" > 
    <TextView 
     android:id="@+id/topText" 
     android:layout_width="match_parent" 
     android:layout_height="1000dp" 
     android:text="@string/lotsoftext" /> 
    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:background="@drawable/webview" /> 
    <TextView 
     android:id="@+id/topText" 
     android:layout_width="match_parent" 
     android:layout_height="1000dp" 
     android:text="@string/lotsoftext" /> 
</RelativeLayout> 

+0

@Jermey Edwards .. Cảm ơn bạn của tôi vì lời giải thích đó nhưng tiếc là yêu cầu của tôi..tôi phải đặt webView bên trong chế độ xem cuộn .. vì vậy khi tôi nhấp vào webView nó sẽ cuộn theo chiều dọc và khi tôi nhấp vào bên ngoài webXem màn hình whoel sẽ cuộn. Bạn có ý tưởng gì về điều này không ?? – Noman

+0

@Jeremy Edwards nhìn vào giải pháp của tôi xin vui lòng, nó cung cấp cách giải quyết để đặt webview bên trong một scrollview [ở đây] (http://stackoverflow.com/a/12963499/1152250) – rus1f1kat0R

6

Tạo Custom cảm ứng chặn Webview

CustomWebview.java

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

public class CustomWebview extends WebView { 

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

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

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

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

trong Layout.xml

<com.package.custom.widgets.CustomWebview 
       android:id="@+id/view_extra" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       /> 
2

Tôi gặp vấn đề tương tự. Bạn nên đặt chiều cao webView của bạn bằng với nội dung của nó. cho điều này làm điều này:
thêm dòng này vào phương pháp onCreate của bạn trong Hoạt động:

webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       webView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)"); 

       super.onPageFinished(view, url); 
      } 
     }); 
webView.addJavascriptInterface(this, "MyApp"); 

và thêm phương pháp này để hoạt động của bạn:

@JavascriptInterface 
    public void resize(final float height) { 
     MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       webView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); 
      } 
     }); 
    } 
Các vấn đề liên quan