NestedScrollView
के अंदर WebView
का उपयोग करते समय कुछ समस्याएं हैं। मुख्य बात यह है कि मैं लड़ रहा हूं कि साइटें जो स्क्रॉल करते समय अधिक सामग्री लोड करती हैं, अच्छी तरह से काम नहीं करती हैं, उदाहरण के लिए vimeo.com। दृश्य को LAYER_TYPE_HARDWARE
पर भी सेट करना काम नहीं करता है, शायद इसी कारण से, यह मूल रूप से ऊंचाई के कारण दुर्घटनाग्रस्त हो जाता है। तो, क्या NestedScrollView
का कोई विकल्प है यदि मैं WebView
के अंदर स्क्रॉल करते समय टूलबार को संक्षिप्त करने के लिए CoordinatorLayout
का उपयोग करना चाहता हूं?क्या वेबव्यू के उपयोग के लिए NestedScrollView का कोई विकल्प है?
मेरा कोड नीचे है। समस्या को पुन: उत्पन्न करने के लिए बस vimeo.com लोड करें और नीचे स्क्रॉल करें।
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);
}
}
संपादित करें: उल्लेख करने के लिए, मैं पहले से ही चारों ओर लपेटकर कोशिश की है भूल एक FrameLayout
, LinearLayout
, RelativeLayout
, आदि मैं मैंने आकार को एक विशिष्ट संख्या में सेट करने का भी प्रयास किया है।
यह समर्थन लाइब्रेरी में एक बग जैसा दिखता है। Google को रिपोर्ट करने के लायक –
मैंने इसे पहले ही रिपोर्ट किया है लेकिन कुछ भी नहीं सुना है और मैंने शून्य टिप्पणियों या स्वीकृति के साथ बहुत सी सहायता लाइब्रेरी वेबव्यू संबंधित बग देखी है, इसलिए मैं बस एक विकल्प खोजने की कोशिश कर रहा हूं। – casolorz
मुझे लगता है कि एक कस्टम NestScrollWebView होना चाहिए, NestedScrollView और WebView नहीं। –