5

Bir NestedScrollView içinde bir WebView kullanırken, birkaç sorun vardır. Savaştığım ana şey, aşağı doğru ilerlerken daha fazla içerik yükleyen sitelerin iyi çalışmadığı, örneğin vimeo.com. Ayrıca, aynı sebepten dolayı, LAYER_TYPE_HARDWARE görünümüne ayarlanmadı, temelde yükseklik nedeniyle çöküyor. Yani, kullanıcı WebView içinde gezinirken araç çubuğunu daraltmak için CoordinatorLayout kullanmak istiyorsam NestedScrollView'a bir alternatif var mı?WebView ile kullanmak için NestedScrollView'a bir alternatif var mı?

Kodum aşağıda. Sorunu yeniden oluşturmak için sadece vimeo.com'u yükleyin ve aşağı kaydırın.

activity_scrolling.xml

<android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/app_bar_height" 
     android:fitsSystemWindows="true" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/toolbar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/AppTheme.PopupOverlay"/> 

     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="com.webviewnestedscroll.ScrollingActivity" 
     tools:showIn="@layout/activity_scrolling"> 

     <WebView 
      android:id="@+id/webview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"></WebView> 
    </android.support.v4.widget.NestedScrollView> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@android:drawable/ic_dialog_email" 
     app:layout_anchor="@id/app_bar" 
     app:layout_anchorGravity="bottom|end"/> 

</android.support.design.widget.CoordinatorLayout> 

ScrollingActivity.java

package com.webviewnestedscroll; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class ScrollingActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scrolling); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
     WebView view = (WebView) findViewById(R.id.webview); 
     view.setWebViewClient(new WebViewClient()); 
     WebSettings settings = view.getSettings(); 
     settings.setJavaScriptEnabled(true); 
     settings.setAllowContentAccess(true); 
     settings.setAppCacheEnabled(true); 
     settings.setDatabaseEnabled(true); 
     settings.setDomStorageEnabled(true); 
     settings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
     settings.setJavaScriptEnabled(true); 
     settings.setSupportZoom(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setBuiltInZoomControls(true); 
     settings.setAppCacheEnabled(true); 
     settings.setAppCachePath(getCacheDir().getAbsolutePath()); 
     settings.setDatabaseEnabled(true); 
     settings.setSupportMultipleWindows(true); 
     settings.setLoadWithOverviewMode(true); 
     settings.setUseWideViewPort(true); 
     settings.setDomStorageEnabled(true); 
     settings.setAllowContentAccess(true); 
     settings.setAllowFileAccess(true); 
     settings.setSaveFormData(true); 
     //view.setLayerType(View.LAYER_TYPE_HARDWARE, null); 

     view.loadUrl("http://vimeo.com"); 



    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_scrolling, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

DÜZENLEME: Zaten etrafında kaydırma denedim, söz unuttum bir FrameLayout, LinearLayout, RelativeLayout vb ben Ayrıca boyutları belirli bir sayıya ayarlamayı denedi.

+0

Destek kitaplığında bir hataya benziyor. Google'a rapor vermeye değer. –

+0

Zaten bunu bildirdim ama hiçbir şey duymadım ve sıfır yorum veya onayları ile bir sürü destek kütüphanesi webview ilgili böcek gördüm, bu yüzden sadece bir alternatif bulmaya çalışıyorum. – casolorz

+0

Bence NestedcrollView ve WebView değil, özel bir NestScrollWebView olmalı. –

cevap

0

i referred gibi, sen gibi android:descendantFocusability="blocksDescendants" ile LinearLayout eklemeyi denemelisiniz:

<android.support.v4.widget.NestedScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="com.webviewnestedscroll.ScrollingActivity" 
     tools:showIn="@layout/activity_scrolling"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:descendantFocusability="blocksDescendants" > 

     <WebView 
      android:id="@+id/webview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"></WebView> 

     </LinearLayout> 
</android.support.v4.widget.NestedScrollView> 

Mayıs size yardımcı olacak. Teşekkürler.

+0

Teşekkürler ama aynı sorunu var. Eğer vimeo.com'un alt kısmına kadar gidersem, sayfa aşağıya indiğimi fark etmiyor ve altta bir ton beyaz alan var. – casolorz

İlgili konular