我正在为Android编写一个简单的文本/电子书查看器,因此我使用了TextView向用户显示HTML格式的文本,因此他们可以通过来回浏览页面中的文本.但我的问题是我不能在Android中对文本进行分页.
我不能(或者我不知道如何)从断行和分页算法中获得适当的反馈,其中TextView用于将文本分成行和页面.因此,我无法理解内容在实际显示中的结束位置,以便我继续从下一页的剩余部分开始.我想找到克服这个问题的方法.
如果我知道屏幕上绘制的最后一个字符是什么,我可以轻松地填充足够的字符来填充屏幕,并且知道实际绘画的完成位置,我可以继续下一页.这可能吗?怎么样?
在StackOverflow上已经多次询问过类似的问题,但没有提供令人满意的答案.这些只是其中的一小部分:
有一个答案,似乎有效,但它很慢.它会添加字符和行,直到填充页面.我不认为这是打破分页的好方法:
它不是这个问题,而是PageTurner电子书阅读器大部分都是正确的,尽管它有点慢.
PS:我不局限于TextView,我知道断行和分页算法可能非常复杂(如在TeX中),所以我不是在寻找一个最佳答案,而是一个相当快速的解决方案,可以被用户.
更新:这似乎是获得正确答案的良好开端:
答:完成文本布局后,可以找到可见文本:
ViewTreeObserver vto = txtViewEx.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = txtViewEx.getViewTreeObserver();
obs.removeOnGlobalLayoutListener(this);
height = txtViewEx.getHeight();
scrollY = txtViewEx.getScrollY();
Layout layout = txtViewEx.getLayout();
firstVisibleLineNumber = layout.getLineForVertical(scrollY);
lastVisibleLineNumber = layout.getLineForVertical(height+scrollY);
}
});
Run Code Online (Sandbox Code Playgroud) 我从测量中收集了一组> 2000个数字.我想从这个数据集中抽样,在每次测试中约10次,同时保持整体的概率分布,并在每次测试中(尽可能地扩展).例如,在每个测试中,我想要一些小值,一些中产阶级值,一些大值,其中均值和方差大致接近原始分布.结合所有测试,我还想要所有样本的总平均值和方差,大约接近原始分布.
由于我的数据集是长尾概率分布,因此每个分位数的数据量不同:
图1.约2k数据元素的密度图.
我正在使用Java,现在我正在使用统一分布,并使用数据集中的随机int,并返回该位置的数据元素:
public int getRandomData() {
int data[] ={1231,414,222,4211,,41,203,123,432,...};
length=data.length;
Random r=new Random();
int randomInt = r.nextInt(length);
return data[randomInt];
}
Run Code Online (Sandbox Code Playgroud)
我不知道它是否按我的意愿工作,因为我按照测量的顺序使用数据,这有很大的串行相关性.
这是一个仅限IE的网站,我想与其他浏览器一起使用,例如Firefox:
https://golestan.sbu.ac.ir/Forms/AuthenticateUser/login.htm
我被迫将这个网站用于我的大学.它使用Msxml2.XMLHTTP,这是一个仅限IE的功能.我试图将其转换为XMLHttpRequest仅适用于Firefox.这是我创建的Greasemonkey脚本.现在它没有给出错误,但它不起作用.所有功能都来自网站的原始脚本,但它们会被更改以便它们可以使用XMLHttpRequest.如果登录脚本出现,我很好.我该如何调试这个javascript?
// ==UserScript==
// @name Golestan Login
// @namespace sbu.ac.ir
// @include https://golestan.sbu.ac.ir/Forms/AuthenticateUser/login.htm
// @version 1
// @grant none
// ==/UserScript==
var isInternetExplorer = 0;
function check(){
var x;
if (window.XMLHttpRequest) {
x = new XMLHttpRequest();
} else {
try {
x = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
x = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
x = false;
}
}
}
x.open("HEAD",document.location,true);
x.send();
var sd=new Date(x.getResponseHeader('Last-Modified'));
var cd=new …Run Code Online (Sandbox Code Playgroud) 您可能知道,Bionic是Google用来运行Android应用程序的C库.有人在Linux机器上进行编译,因此可以在Android之外轻松使用.这是最近一次努力的代码,最初称为Gentoo-bionic.原始项目是基于Gentoo的,但目前的来源不是Gentoo特有的.我正在使用Ubuntu.这是代码:
https://github.com/gentoobionic/bionic
这是关于ELC2013的介绍:
我试图在X86_64 Ubuntu上编译它,但失败了.我试过了:
./autogen.sh
./configure
Run Code Online (Sandbox Code Playgroud)
我有:
configure: error: unsupported host cpu x86_64
Run Code Online (Sandbox Code Playgroud)
所以我尝试过:
./configure --build=arm-linux --target=arm-linux --host=arm-linux
Run Code Online (Sandbox Code Playgroud)
配置很好,但我得到:
$ make
make: *** No rule to make target `libc/arch-x86/include/machine/cpu-features.h',
needed by `all-am'. Stop.
Run Code Online (Sandbox Code Playgroud)
是否有人可以建议解决方法?
我有一个BLOB URL,我想将其重新创建为第二个BLOB URL,以便默认下载.
var blob1 = new Blob(["Hello world!"], { type: "text/plain" });
url1 = window.URL.createObjectURL(blob1);
blob2=new Blob([url1], {type: 'application/octet-stream'});
url2 = window.URL.createObjectURL(blob2);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url2;
a.click();
window.URL.revokeObjectURL(url);Run Code Online (Sandbox Code Playgroud)
在JSFiddle中看到:
https://jsfiddle.net/7spry3jn/
但这只会创建一个包含第一个URL的文本文件.如何从Javascript中的第一个BLOB URL读取数据并将其提供给创建第二个BLOB?
android ×2
java ×2
javascript ×2
automake ×1
bionic ×1
blob ×1
compilation ×1
download ×1
pagination ×1
sampling ×1
textview ×1
ubuntu ×1
url ×1