Android WebView पर क्लिक इवेंट डिटेक्ट करना
यह उदाहरण दर्शाता है कि WebView पर टच/क्लिक इवेंट कैसे कैप्चर किया जाता है और URL क्लिक को सामान्य WebView क्लिक से कैसे अलग किया जाता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें और प्रोजेक्ट बनाएं।
चरण 2: लेआउट में WebView जोड़ें
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
चरण 3: MainActivity.java - टच लिस्टनर और हैंडलर
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener, Handler.Callback {
private static final int CLICK_ON_WEBVIEW = 1;
private static final int CLICK_ON_URL = 2;
private final Handler handler = new Handler(this);
WebView webView;
WebViewClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
webView.setOnTouchListener(this);
client = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
handler.sendEmptyMessage(CLICK_ON_URL);
return false;
}
};
webView.setWebViewClient(client);
webView.setVerticalScrollBarEnabled(false);
webView.loadUrl("https://www.google.com");
}
@Override
public boolean handleMessage(Message msg) {
if (msg.what == CLICK_ON_URL) {
handler.removeMessages(CLICK_ON_WEBVIEW);
return true;
}
if (msg.what == CLICK_ON_WEBVIEW) {
Toast.makeText(this, "WebView क्लिक किया गया", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.webView && event.getAction() == MotionEvent.ACTION_DOWN) {
handler.sendEmptyMessageDelayed(CLICK_ON_WEBVIEW, 500);
}
return false;
}
}
चरण 4: AndroidManifest.xml में इंटरनेट अनुमति
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
कैसे काम करता है
OnTouchListenerWebView पर टच डिटेक्ट करता हैHandler500ms देरी के बाद क्लिक कन्फर्म करता हैWebViewClient.shouldOverrideUrlLoading()लिंक क्लिक डिटेक्ट करता है- यदि URL क्लिक होता है, तो WebView क्लिक मैसेज कैंसल हो जाता है
ऐप चलाएं
डिवाइस कनेक्ट करें, Run पर क्लिक करें। Google पेज लोड होगा। खाली जगह पर टैप करने पर "WebView क्लिक किया गया" टोस्ट दिखेगा, लिंक पर क्लिक करने पर नहीं।