Java 如何解决Android HorizontalWebview内容溢出的屏幕宽度问题?

Java 如何解决Android HorizontalWebview内容溢出的屏幕宽度问题?,java,android,css,android-webview,Java,Android,Css,Android Webview,在我的Android native项目中,我有一个HorizontalWebview,它一页一页地加载巨大的html文件。当向右滚动时,前几页内容显示得非常完美,但在滚动了几页后,我发现内容溢出了屏幕宽度,如下图所示- 这是我定制的HorizontalWebView的代码- public class HorizontalWebView2 extends WebView { private float x1 = -1; private int pageCount = 0;

在我的Android native项目中,我有一个HorizontalWebview,它一页一页地加载巨大的html文件。当向右滚动时,前几页内容显示得非常完美,但在滚动了几页后,我发现内容溢出了屏幕宽度,如下图所示-

这是我定制的HorizontalWebView的代码-

public class HorizontalWebView2 extends WebView {
    private float x1 = -1;
    private int pageCount = 0;

    public HorizontalWebView2(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                x1 = event.getX();
                break;
            case MotionEvent.ACTION_UP:
                float x2 = event.getX();
                float deltaX = x2 - x1;
                if (Math.abs(deltaX) > 100) {
                    // Left to Right swipe action
                    if (x2 > x1) {
                        turnPageLeft();
                        return true;
                    }

                    // Right to left swipe action
                    else {
                        turnPageRight();
                        return true;
                    }

                }
                break;
        }
        return true;
    }

    private int current_x = 0;

    private void turnPageLeft() {
        if (getCurrentPage() > 0) {
            int scrollX = getPrevPagePosition();
            loadAnimation(scrollX);
            current_x = scrollX;
            scrollTo(scrollX, 0);
        }
    }

    private int getPrevPagePosition() {
        int prevPage = getCurrentPage() - 1;
        return (int) Math.ceil(prevPage * this.getMeasuredWidth());
    }

    private void turnPageRight() {
        if (getCurrentPage() < pageCount - 1) {
            int scrollX = getNextPagePosition();
            loadAnimation(scrollX);
            current_x = scrollX;
            scrollTo(scrollX, 0);
        }
    }

    private void loadAnimation(int scrollX) {
        ObjectAnimator anim = ObjectAnimator.ofInt(this, "scrollX",
                current_x, scrollX);
        anim.setDuration(500);
        anim.setInterpolator(new LinearInterpolator());
        anim.start();
    }

    private int getNextPagePosition() {
        int nextPage = getCurrentPage() + 1;
        return (int) Math.ceil(nextPage * this.getMeasuredWidth());
    }

    public int getCurrentPage() {
        return (int) (Math.ceil((double) getScrollX() / this.getMeasuredWidth()));
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }
}
我调用了这个方法并加载了webview,如下所示-

<HorizontalWebView2
            android:id="@+id/web_view_horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none"
            />
private void injectJavascript() {
    String js = "function initialize(){\n" +
            "    var d = document.getElementsByTagName('body')[0];\n" +
            "    var ourH = window.innerHeight;\n" +
            "    var ourW = window.innerWidth;\n" +
            "    var fullH = d.offsetHeight;\n" +
            "    var pageCount = Math.floor(fullH/ourH)+1;\n" +
            "    var currentPage = 0;\n" +
            "    var newW = pageCount*ourW;\n" +
            "    d.style.height = ourH+'px';\n" +
            "    d.style.width = newW+'px';\n" +
            "    d.style.margin = 0;\n" +
            "    d.style.webkitColumnCount = pageCount;\n" +
            "    return pageCount;\n" +
            "}";
    mWebView.loadUrl("javascript:" + js);
    mWebView.loadUrl("javascript:alert(initialize())");

}
mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                injectJavascript();
            }
        });

        mWebView.loadDataWithBaseURL(null, stringHTML, "text/html", "UTF-8", null);
我试图通过在xml(HorizontalWebview)中添加边距和填充来解决内容溢出问题,并尝试使用CSS解决此问题,如下所示-

<HorizontalWebView2
            android:id="@+id/web_view_horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none"
            />
private void injectJavascript() {
    String js = "function initialize(){\n" +
            "    var d = document.getElementsByTagName('body')[0];\n" +
            "    var ourH = window.innerHeight;\n" +
            "    var ourW = window.innerWidth;\n" +
            "    var fullH = d.offsetHeight;\n" +
            "    var pageCount = Math.floor(fullH/ourH)+1;\n" +
            "    var currentPage = 0;\n" +
            "    var newW = pageCount*ourW;\n" +
            "    d.style.height = ourH+'px';\n" +
            "    d.style.width = newW+'px';\n" +
            "    d.style.margin = 0;\n" +
            "    d.style.webkitColumnCount = pageCount;\n" +
            "    return pageCount;\n" +
            "}";
    mWebView.loadUrl("javascript:" + js);
    mWebView.loadUrl("javascript:alert(initialize())");

}
mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                injectJavascript();
            }
        });

        mWebView.loadDataWithBaseURL(null, stringHTML, "text/html", "UTF-8", null);
断字:断字
溢出-x:隐藏

但所有的解决方案都没有真正起作用。所以,我需要一个永久的解决方案,这样,每个地方的内容都保留在屏幕内,不会溢出屏幕