एंड्रॉइड WebView में स्क्रॉलिंग अक्षम करना
यह गाइड WebView में टच इवेंट्स को इंटरसेप्ट करके स्क्रॉलिंग को प्रोग्रामेटिकली रोकने का तरीका दिखाता है।
लेआउट (activity_main.xml)
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
MainActivity.java
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
// WebView सेटिंग्स
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(false);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://www.example.com");
// स्क्रॉलिंग अक्षम करने के लिए OnTouchListener
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// ACTION_MOVE इवेंट्स को कंज्यूम करें (स्क्रॉल रोकें)
// लेकिन DOWN, UP, CLICK को पास होने दें
return event.getAction() == MotionEvent.ACTION_MOVE;
}
});
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
वैकल्पिक दृष्टिकोण: कस्टम WebView क्लास
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;
public class NonScrollableWebView extends WebView {
private boolean scrollEnabled = false;
public NonScrollableWebView(Context context) {
super(context);
}
public NonScrollableWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollEnabled(boolean enabled) {
this.scrollEnabled = enabled;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!scrollEnabled && event.getAction() == MotionEvent.ACTION_MOVE) {
return true; // इवेंट कंज्यूम करें, स्क्रॉल न करें
}
return super.onTouchEvent(event);
}
}
XML में कस्टम WebView का उपयोग
<com.example.app.NonScrollableWebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
जावास्क्रिप्ट के माध्यम से स्क्रॉलिंग अक्षम करना
webView.evaluateJavascript(
"document.body.style.overflow = 'hidden';",
null
);
महत्वपूर्ण विचार
ACTION_MOVEब्लॉक करने से स्क्रॉल रुकता है लेकिन जूम/क्लिक काम करते हैं- उपयोगकर्ता अनुभव के लिए स्क्रॉलिंग अक्षम करने से बचें जब तक आवश्यक न हो
- लंबे कंटेंट के लिए, स्क्रॉलिंग अक्षम करने के बजाय
NestedScrollViewके अंदर WebView रखने पर विचार करें - कुछ वेबसाइट्स अपने खुद के स्क्रॉल हैंडलिंग लागू कर सकती हैं
उपयोग के मामले
- फिक्स्ड-हेडर/फुटर के साथ WebView
- कस्टम स्क्रॉल कंट्रोल्स लागू करना
- किओस्क मोड या रीड-ओनली डिस्प्ले