2012-09-24 14 views
5

मेरे पास क्या है:
अभी मेरे पास एक अभिभावक के रूप में स्क्रॉल दृश्य है। इस स्क्रॉल व्यू के अंदर, मैं एक वेबव्यू का उपयोग कर रहा हूं जो एक यूआरएल लोड करता है और फिर इसमें टेक्स्ट दिखाता है। यहाँ मेरी xml है:स्क्रॉल व्यू के अंदर स्क्रॉल वेबव्यू

<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>  

मुझे क्या करना चाहते हैं:
मैं इसे अंदर WebView स्क्रॉल करने के लिए चाहते हैं। जब मैं वेब दृश्य को स्पर्श करता हूं, दुर्भाग्यवश अभिभावक स्क्रॉल दृश्य को कॉल किया जाता है। मुझे पेरेंट स्क्रॉल व्यू भी रखना है, लेकिन इसके अलावा मैं वेबव्यू पर स्पर्श करते समय इसके अंदर वेबव्यू सामग्री को स्क्रॉल करना चाहता हूं।

मैं यह कैसे कर सकता हूं?

उत्तर

4

एंड्रॉइड डिज़ाइन दस्तावेज़ों के मुताबिक आपको स्क्रॉलिंग कंटेनर के अंदर स्क्रॉलिंग कंटेनर कभी नहीं डालना चाहिए यदि वे एक ही दिशा को स्क्रॉल करते हैं। यह ऐसी चीज को संभालने के लिए नहीं है।

+2

@CaseyB ... लेकिन इसकी मेरी आवश्यकता। मुझे वेब दृश्य को स्क्रॉल व्यू में रखना है। यू इस बारे में कोई विचार है ?? – Noman

+2

तब मुझे डर है कि आपकी आवश्यकताएं गलत हैं, आपको इसे कभी करने की आवश्यकता नहीं है। –

+0

@ जोसेफएरल .. ठीक है तो मैं डिजाइन को बदलने की कोशिश करता हूं। यह मेरे लिए मुश्किल हो रहा है .. – Noman

0

नेस्टेड स्क्रोल करने योग्य विजेट आमतौर पर निराश होते हैं। यह एक भ्रमित उपयोगकर्ता अनुभव है क्योंकि गलत चीज़ को स्क्रॉल करना आसान है। मान लें कि मैं बाहरी स्क्रॉल क्षेत्र को स्क्रॉल करना चाहता हूं लेकिन मैंने पहले आंतरिक क्षेत्र को छुआ और वास्तव में कड़ी मेहनत की। तब भीतर वाला एक स्क्रॉल करेगा और मैं हुह की तरह हो जाऊंगा? यह क्यों स्क्रॉल नहीं किया?

भले ही कोई क्षैतिज स्क्रॉल करता है और दूसरा लंबवत है, तो इशारा पहचानकर्ता एक दूसरे के लिए भ्रमित हो सकता है ताकि आपको वही प्रभाव मिल सके। यह एक वैध उपयोग मामला है लेकिन यह अभी भी iffy है और मैं इसे टालना होगा। (आईई: मनुष्य पूरी तरह से लंबवत और क्षैतिज रूप से ठीक से स्वाइप नहीं करते हैं, यह आमतौर पर कोण के साथ होता है।)

मैं स्क्रॉल करने योग्य क्षेत्रों को तोड़ने के लिए डिज़ाइन को बदलने के लिए दबाव डालूंगा। आदर्श रूप से प्रति पृष्ठ 1 स्क्रॉल करने योग्य आइटम। यहां तक ​​कि खुद को प्रस्तावित करें और डिजाइनर को दोनों अनुभव प्रदान करें और देखें कि वे कौन सी चुनते हैं।

यह कैसे व्यक्त करेगा यह व्यक्त करने के लिए। इस उदाहरण को देखो। यह एक समाधान नहीं है बल्कि अनुभव दिखाने के लिए है।

<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

@ जेर्मी एडवर्ड्स .. इस तरह के स्पष्टीकरण के लिए धन्यवाद, लेकिन दुर्भाग्यवश मेरी आवश्यकता .. मुझे वेब दृश्य को स्क्रॉल व्यू के अंदर रखना होगा .. इसलिए जब मैं वेब व्यू पर क्लिक करता हूं तो इसे लंबवत स्क्रॉल करना चाहिए और जब मैं वेब पर क्लिक करता हूं तो व्हाल स्क्रीन देखें स्क्रॉल करेंगे। क्या आपको इसके बारे में कोई जानकारी है ?? – Noman

+0

@ जेरेमी एडवर्ड्स कृपया मेरे समाधान को देखें, यह स्क्रॉलव्यू के अंदर वेबव्यू रखने के लिए कामकाज प्रदान करता है [यहां] (http://stackoverflow.com/a/12963499/1152250) – rus1f1kat0R

6

layout.xml में एक कस्टम टच इंटरसेप्टिंग वेब-दृश्य

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); 
    }   
} 

बनाएं

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

मुझे एक ही समस्या थी। आपको अपनी वेबव्यू ऊंचाई को अपनी सामग्री के बराबर सेट करना चाहिए। के लिए यह ऐसा करते हैं:
गतिविधि में अपनी onCreate विधि को यह पंक्तियां जोड़ें:

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"); 

और अपनी गतिविधि को यह पद्धति जोड़ें:

@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))); 
      } 
     }); 
    }