9

के अंदर अनिश्चित काल तक बढ़ती है यह मेरा लेआउट है। जब मैं google.com लोड करता हूं, तो वेबव्यू की ऊंचाई अनिश्चित काल तक बढ़ती रहती है। वेबव्यू का ऑनसाइज चेंज फ़ंक्शन कॉलिंग जारी रहता है और मैं देख सकता हूं कि वेबव्यू अनिश्चित काल तक विस्तारित रहता है। मैंने डिजाइन और एपकोम्पेट पुस्तकालयों के 22.2.1 और 23.1.0 की कोशिश की है और कोई प्रभाव नहीं है।वेबव्यू ऊंचाई एक नेस्टेडस्क्रोल व्यू

कोई समाधान? : - |

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/black"> 

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="fill_vertical" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <com.example.ajay.scrollabletoolbar.MyWebView 
     android:id="@+id/webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true"/> 
</android.support.v4.widget.NestedScrollView> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbarlayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/restricted_browser_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?actionBarSize" 
     android:background="@color/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#FFFFFF" 
      android:descendantFocusability="beforeDescendants" 
      android:focusableInTouchMode="true"> 

      <EditText 
       android:id="@+id/current_url" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_centerVertical="true" 
       android:backgroundTint="@android:color/darker_gray" 
       android:dropDownAnchor="@+id/restricted_browser_toolbar" 
       android:hint="hint hint" 
       android:imeOptions="actionGo|flagNoExtractUi" 
       android:inputType="textNoSuggestions|textUri" 
       android:paddingBottom="8dp" 
       android:paddingEnd="8dp" 
       android:paddingStart="8dp" 
       android:singleLine="true"/> 

      <ImageView 
       android:id="@+id/clear_url_text" 
       android:layout_width="48dp" 
       android:layout_height="48dp" 
       android:layout_alignRight="@+id/current_url" 
       android:layout_centerVertical="true" 
       android:layout_marginRight="8dp" 
       android:src="@android:drawable/ic_menu_close_clear_cancel" 
       android:visibility="gone"/> 
     </RelativeLayout> 
    </android.support.v7.widget.Toolbar> 
</android.support.design.widget.AppBarLayout> 

+0

इसे एक निश्चित आकार – Nanoc

+1

सेट करें मुझे नहीं लगता कि मैं एक निश्चित आकार का उपयोग कर सकता हूं। मैं वेबव्यू को सभी फोन और टैबलेट में पूर्ण विंडो लेना चाहता हूं। – onusopus

+0

बेशक आप खिड़की के आकार को वेबव्यू पर सेट करने जितना आसान कर सकते हैं, आपको लगता है कि आप क्यों नहीं कर सकते? – Nanoc

उत्तर

5

एक वाक्य में, तुम सिर्फ नहीं अपने WebViewNestedScrollView अंदर डाल सकते हैं। यह इरादे के रूप में काम कर रहा है।

यदि आप एक WebView अंदर NestedScrollView (या ScrollView), आपके WebView उपायों View.MeasureSpec.UNSPECIFIED आवश्यकता के साथ उसके आयाम डाल दिया। कोई फर्क नहीं पड़ता कि आप MATCH_PARENT या अपने WebView की ऊंचाई के लिए 100 डीपी जैसे निश्चित आकार भी सेट करते हैं। NestedScrollView अपने बच्चों को View.MeasureSpec.UNSPECIFIED आवश्यकता के साथ खुद को मापने के लिए मजबूर करता है। यह सब NestedScrollView की measureChild() विधि पर होता है। यह नीचे प्रकार है:

@Override 
protected void measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) { 
    ViewGroup.LayoutParams lp = child.getLayoutParams(); 
    int childWidthMeasureSpec; 
    int childHeightMeasureSpec; 
    childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, getPaddingLeft() 
      + getPaddingRight(), lp.width); 
    childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 
    child.measure(childWidthMeasureSpec, childHeightMeasureSpec); 
} 

और MeasureSpec.UNSPECIFIED मतलब है, के रूप में अपनी लेबल का तात्पर्य है, यह हो सकता है जो कुछ भी आकार यह चाहता है। मुझे लगता है कि "Writing Custom Views for Android" session at Google I/O 2013 से यह स्लाइड आपको समझने में मदद करेगी।

enter image description here

वास्तव में यह कोई मुद्दा जो this thread में चर्चा की गई है, और this Google engineer करने के लिए, के अनुसार

इस रूप में डेस्कटॉप में हैं, तो आप ताकि वह पृष्ठ के ऊंचाई के लिए ब्राउज़र विंडो का आकार बदलने है लंबवत स्क्रॉल नहीं कर सकते हैं। वेबव्यू के बजाए NestedScrollView में स्क्रॉलिंग हो रही है। इसलिए पृष्ठ में किसी भी जेएस का नतीजा किसी भी स्क्रॉल ईवेंट को नहीं देखता है, इसलिए यह नहीं जानता कि आपने पृष्ठ के अंत तक स्क्रॉल किया है और अधिक सामग्री लोड करें।

तो, लब्बोलुआब यह है, करते नहीं अपने WebViewNestedScrollView अंदर डाल दिया। आपको WebView वेब पेज को स्क्रॉल करना चाहिए। हैप्पी कोडिंग! :)

0

मैं इस सवाल को पहले बंद करने के लिए क्षमा चाहता हूं। हम एक नेस्टेडस्क्रोल व्यू के अंदर एक वेबव्यू नहीं डाल सकते हैं। लेकिन एनएसवी की प्रकृति, यह अपने बच्चे को अपनी पूरी ऊंचाई तक फैलाती है ताकि यह टूलबार के साथ ढहने योग्य/स्क्रॉल करने योग्य टूलबार आदि के लिए अपेक्षित काम कर सके। इसलिए यदि वेबव्यू जोड़ा जाता है, तो वेबव्यू या तो अनिश्चित काल तक या बड़े हो जाएगा मूल्य और इसलिए यह उम्मीद के अनुसार काम नहीं करेगा। यह एक रेफरी हो सकता है: code.google.com/p/android/issues/detail?id=198965

संबंधित मुद्दे