WebView のタッチを無効にする方法を探しているので、ユーザーは HTML リンクをクリックすることはできませんが、WebView のズーム機能とスクロール機能を維持できます。
3740 次
4 に答える
1
Webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
于 2012-09-17T00:37:04.107 に答える
1
私は最初にrattisukの答えを使用しましたが、どこかをクリックするとクリックが傍受されますが、長いクリックに変わり、電話が振動し、テキストフィールドをクリックすると潜在的な編集メニューが表示されることに気付きました. また、Web ビューで変更可能な UI 要素を押すと (リンクやボタンをクリックするなど)、それらの UI 要素の外観が変わります。それを防ぐために、ここに私の改善された解決策があります:
// Disable the haptic feedback so that handling the long click doesnt make the phone vibrate
webview.setHapticFeedbackEnabled(false);
// Intercept long click events so that they dont reach the webview
webview.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
return true;
}
});
// Intercept any touch event not related to scrolling/zooming
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Change ACTION_DOWN location to outside of the webview so that it doesnt affect
// pressable element in the webview (buttons receiving PRESS" will change appearance)
event.setLocation(webview.getWidth() + 1, webview.getHeight() + 1);
}
// Intercept any "up" event
return event.getAction() == MotionEvent.ACTION_UP;
}
});
于 2014-07-04T20:28:48.937 に答える
0
これが私の解決策です。ユーザーがJavaScriptクリックイベントをトリガーすることはできません
public class NonClickableWebView extends WebView {
private GestureDetectorCompat gestureDetector;
private boolean isSingleTap = false;
public NonClickableWebView(Context context) {
super(context);
gestureDetector = new GestureDetectorCompat(context, new GestureDetector());
}
public NonClickableWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
gestureDetector = new GestureDetectorCompat(context, new GestureDetector());
}
public NonClickableWebView(Context context, AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetectorCompat(context, new GestureDetector());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isSingleTap = false;
}
gestureDetector.onTouchEvent(event);
if (isSingleTap && event.getAction() == MotionEvent.ACTION_UP) {
return true;
}
return super.onTouchEvent(event);
}
private class GestureDetector extends android.view.GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent e) {
isSingleTap = true;
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
isSingleTap = true;
return false;
}
}
}
于 2015-09-03T10:11:22.440 に答える