Java 如何解决Android HorizontalWebview内容溢出的屏幕宽度问题?
在我的Android native项目中,我有一个HorizontalWebview,它一页一页地加载巨大的html文件。当向右滚动时,前几页内容显示得非常完美,但在滚动了几页后,我发现内容溢出了屏幕宽度,如下图所示- 这是我定制的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;
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:隐藏 但所有的解决方案都没有真正起作用。所以,我需要一个永久的解决方案,这样,每个地方的内容都保留在屏幕内,不会溢出屏幕