枪王编程方式的WebView方式、WebView

2023-09-07 10:57:35 作者:天镜云生

我有一个包含一个单一的web视图显示不同的HTML内容基于一个通用的活动。

每个HTML内容meta标签是这样的。

 < META NAME =视口CONTENT =WIDTH =设备的宽度,高度=设备的高度,最小规模为0.4,最大规模= 3,初始规模= 0.5> 

和编程的WebView配置,以适应这些$ C $屏幕内容CS。

 的WebView web视图=(的WebView)findViewById(R.id.webview1);        webView.getSettings()setJavaScriptEnabled(真)。        。webView.getSettings()setLoadWithOverviewMode(真);        。webView.getSettings()setUseWideViewPort(真);        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);        webView.setScrollbarFadingEnabled(真);        。webView.getSettings()setBuiltInZoomControls(真);        。webView.getSettings()setLoadsImagesAutomatically(真);        webView.getSettings()setLightTouchEnabled(真)。        webView.getSettings()setDomStorageEnabled(真)。        webView.setBackgroundColor(0); 

不幸的是既不元code和的WebView配置不会在屏幕上不适合的内容;但双攻适合的内容非常好。所以我不知道我可以可模拟双编程敲击的WebView?

解决方案

  / ** * * /包com.y2cf.hoppr.utils.viewutils;进口android.content.Context;进口android.os.SystemClock;进口android.util.AttributeSet;进口android.util.Log;进口android.view.GestureDetector;进口android.view.MotionEvent;进口android.webkit.WebView;/ ** * @author拉杰什 * * /公共类MyWebView扩展的WebView {    私人GestureDetector gestureDetector;    / **     * @参数方面     * /    公共MyWebView(上下文的背景下){        超级(上下文);        gestureDetector =新GestureDetector(上下文,新GestureListener());        // TODO自动生成构造函数存根    }    / **     * @参数方面     * @参数ATTRS     * /    公共MyWebView(上下文的背景下,ATTRS的AttributeSet){        超(背景下,ATTRS);        gestureDetector =新GestureDetector(上下文,新GestureListener());        // TODO自动生成构造函数存根    }    / **     * @参数方面     * @参数ATTRS     * @参数defStyle     * /    公共MyWebView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){        超(背景下,ATTRS,defStyle);        gestureDetector =新GestureDetector(上下文,新GestureListener());        // TODO自动生成构造函数存根    }    公共无效simulateDoubleTap()    {        simulateDoubleTapEvent(0);        simulateDoubleTapEvent(2);        simulateDoubleTapEvent(2);        simulateDoubleTapEvent(1);        simulateDoubleTapEvent(0);    }    私人无效simulateDoubleTapEvent(INT行动)    {        长时间的停机= SystemClock.uptimeMillis();        长EVENTTIME = SystemClock.uptimeMillis()+ 100;        浮动X = 0.0;        浮Y = 0.0;        //元状态列表在这里找到:developer.android.com/reference/android/view/KeyEvent.html#getMetaState()        INT亚状态= 0;        MotionEvent我= MotionEvent.obtain(            停机时间,            EVENTTIME,            行动,            X,            Y,            亚状态        );        dispatchTouchEvent(箱);    }    @覆盖    公共布尔onTouchEvent(MotionEvent事件){        // TODO自动生成方法存根        返回gestureDetector.onTouchEvent(事件);    }    私有类GestureListener扩展GestureDetector.SimpleOnGestureListener {        @覆盖        公共布尔onDown(MotionEvent五){            返回true;        }        //事件时双击出现        @覆盖        公共布尔onDoubleTap(MotionEvent五){            浮X = e.getX();            浮Y = e.getY();            Log.d(枪王,在螺纹:(+ X +,+ Y +));            返回true;        }    }} 
谁说在家只能当咸鱼,教你如何躺着玩游戏学编程

创建一个这样的类并调用simulateDoubleTap()基准值确定方法。希望这将帮助,和你的WebView应该是这个类的一个实例。

I have a generic activity that contains a single webview to show different html based content.

Every html content has meta tag like this.

<meta name="viewport" content="width=device-width,height=device-height, minimum-scale=0.4, maximum-scale=3,initial-scale=0.5"> 

And WebView programmatically configured to fit content in screen with these codes.

WebView webView = (WebView) findViewById(R.id.webview1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);        
        webView.getSettings().setUseWideViewPort(true);     
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);    
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setLightTouchEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);

        webView.setBackgroundColor(0);

Unfortunately neither meta code nor webview configurations doesn't fit content in screen; but double tapping fits content excellent. So i wonder can i simulate double tapping on webview programmatically?

解决方案

/**
 * 
 */
package com.y2cf.hoppr.utils.viewutils;

import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;

/**
 * @author rajesh
 *
 */
public class MyWebView extends WebView {


    private GestureDetector gestureDetector;

    /**
     * @param context
     */
    public MyWebView(Context context) {
        super(context);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }

    /**
     * @param context
     * @param attrs
     */
    public MyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }

    /**
     * @param context
     * @param attrs
     * @param defStyle
     */
    public MyWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        gestureDetector = new GestureDetector(context, new GestureListener());
        // TODO Auto-generated constructor stub
    }


    public void simulateDoubleTap()
    {

        simulateDoubleTapEvent(0);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(2);
        simulateDoubleTapEvent(1);
        simulateDoubleTapEvent(0);
    }

    private void simulateDoubleTapEvent(int action)
    {
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis() + 100;
        float x = 0.0f;
        float y = 0.0f;
        // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
        int metaState = 0;
        MotionEvent me = MotionEvent.obtain(
            downTime, 
            eventTime, 
            action, 
            x, 
            y, 
            metaState
        );
        dispatchTouchEvent(me);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return gestureDetector.onTouchEvent(event);
    }

    private class GestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
        // event when double tap occurs
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            float x = e.getX();
            float y = e.getY();

            Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")");

            return true;
        }
    }

}

Create a class like this and call simulateDoubleTap() methord. Hope this will help, and your webview should be an instance of this class.