我在android中有一个文档阅读器项目。主要活动包括WebView。文本正在从html中读取。在“顶部选项”菜单中,包含一个用于动态增加文本大小的按钮(文本包装)。到目前为止很清楚,但按下按钮时,文本大小有所增加,但所有文本都在屏幕上向下移动,两次按下按钮,文本大小增加,所有文本再次向下移动一点。这种情况真的让读者感到沮丧。读者必须在按下按钮后返回停止的位置,以便读者不会丢失阅读位置。如何解决这个问题?
问题:
解决问题后:
我的WebView的Html内容:
<!DOCTYPE html>
<head>
<style type="text/css">
p{} p.x1{} p.x2{} p.x3{} p.x4{}
h2.x1{} h2.x2{} h2.x3{} h2.x4{}
</style>
</head>
<body>
//paragraph-1
<p class="x1">Title-1</p>
<p class="x2">Title-2</p>
<p class="x3">Title-3</p>
<p class="x4">Title-4</p>
<p>Text content.</p>
//paragraph-2
<h class="x1">Title-1</p>
<h class="x2">Title-2</p>
<p>Text content.</p>
//paragraph-3
<h class="x3">Title-1</p>
<h class="x4">Title-2</p>
<p class="x3">Title-3</p>
<p>Text content.</p>
//paragraph-4
<h class="x2">Title-1</p>
<p class="x3">Title-2</p>
<p>Text content.</p>
//...
</body>
</html>
答案 0 :(得分:2)
您应该在ListView中使用TextViews,并在缩放之前和缩放滚动到存储的列表项之后存储顶级列表项的ID。为了获得良好的滚动效果,您应该隐藏具有基本图像缩放效果的滚动效果。
答案 1 :(得分:1)
我在屏幕上保留文字的想法是存储对任何&#34;元素的引用&#34; (p,div,img等)在屏幕上某个x,y
点,更改字体大小,然后滚动该元素返回到屏幕上。
我创建了一个适用于Android Webview的工作代码示例:
//Route your onclick handler to our new function
function fontBtnClk() {
//Store whatever paragraph container is in the middle of the screen
var currentParagraph = document.elementFromPoint(window.innerWidth/3, window.innerHeight/3);
//If the above "paragraph selector" selected the whitespace in-between two paragraphs, and stored the parent element instead:
if(currentParagraph.tagName.toLowerCase()=="body") {
//Divide by a different number to select the winning paragraph
currentParagraph = document.elementFromPoint(window.innerWidth/3, window.innerHeight/2);
}
//Call your existing font size handler
increaseFontSize();
//Move the previous paragraph back onto the screen:
currentParagraph.scrollIntoView();
}
希望这可以解决您的问题!
答案 2 :(得分:1)
我建议在字体大小增加之前和之后使用 relative 滚动来计算用户应该在哪里。这可以通过几个步骤完成:
相关摘录:
function setSize() {
var heightBefore = textContainer.scrollHeight;
var scrollBefore = textContainer.scrollTop;
var percBefore = scrollBefore / heightBefore;
textContainer.style.fontSize = fontSize + "px";
var heightAfter = textContainer.scrollHeight;
var scrollAfter = textContainer.scrollTop;
var correctedScrollAfter = Math.floor(heightAfter * percBefore);
textContainer.scrollTop = correctedScrollAfter;
}
您可以在此处查看示例:https://jsfiddle.net/Ln43xxv5/
我必须承认我现在无法在Android中测试,但我做相信总体方向应该有效。
答案 3 :(得分:-1)
试试这个:
String uri="But your http URL";
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
OutputStreamWriter writer=new OutputStreamWriter(con.getOutputStream());
StringBuilder sb=new StringBuilder();
sb.append("username="+"Naham");
sb.append("password="+"passNaham");
writer.write(sb.toString());
writer.flush();