5

Bei Verwendung eines WebView innerhalb eines NestedScrollView gibt es ein paar Probleme. Die Hauptsache, die ich kämpfe, ist, dass Websites, die mehr Inhalte laden, wenn Sie nach unten scrollen, nicht gut funktionieren, zum Beispiel vimeo.com. Auch die Einstellung auf LAYER_TYPE_HARDWARE funktioniert nicht, wahrscheinlich aus dem gleichen Grund, es stürzt grundsätzlich wegen der Höhe ab. Also, gibt es eine Alternative zu der NestedScrollView, wenn ich CoordinatorLayout verwenden möchte, um die Symbolleiste zu reduzieren, wenn der Benutzer innerhalb der WebView scrollt?Gibt es eine Alternative zu NestedScrollView für die Verwendung mit einem WebView?

Mein Code ist unten. Um das Problem zu reproduzieren, laden Sie einfach vimeo.com und scrollen Sie nach unten.

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

EDIT: Vergessen zu erwähnen, habe ich bereits versucht es um eine FrameLayout Einwickeln, LinearLayout, RelativeLayout usw. I habe auch versucht, die Größen auf eine bestimmte Anzahl einzustellen.

+0

Es sieht aus wie ein Fehler in der Support-Bibliothek. Es lohnt sich, an Google zu berichten. –

+0

Ich habe es bereits gemeldet, aber ich habe noch nichts gehört und ich habe eine Menge von Webview-Bugs der Support-Bibliothek gesehen, die keine Kommentare oder Danksagungen enthalten, also versuche ich nur, eine Alternative zu finden. – casolorz

+0

Ich denke, es sollte eine benutzerdefinierte NestScrollWebView, nicht NestedScrollView und WebView sein. –

Antwort

0

Wie ich referred, sollten Sie versuchen, LinearLayout mit android:descendantFocusability="blocksDescendants" wie hinzuzufügen:

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

Mai wird es hilfreich für Sie. Vielen Dank.

+0

Danke, aber es hat das gleiche Problem. Wenn ich auf vimeo.com den ganzen Weg nach unten gehe, merkt die Seite nicht, dass ich den ganzen Weg nach unten gegangen bin und es gibt auch eine Tonne weißen Platz am Boden. – casolorz