小编Ho1*_*Ho1的帖子

Android中的分页文本

我正在为Android编写一个简单的文本/电子书查看器,因此我使用了TextView向用户显示HTML格式的文本,因此他们可以通过来回浏览页面中的文本.但我的问题是我不能在Android中对文本进行分页.

我不能(或者我不知道如何)从断行和分页算法中获得适当的反馈,其中TextView用于将文本分成行和页面.因此,我无法理解内容在实际显示中的结束位置,以便我继续从下一页的剩余部分开始.我想找到克服这个问题的方法.

如果我知道屏幕上绘制的最后一个字符是什么,我可以轻松地填充足够的字符来填充屏幕,并且知道实际绘画的完成位置,我可以继续下一页.这可能吗?怎么样?


在StackOverflow上已经多次询问过类似的问题,但没有提供令人满意的答案.这些只是其中的一小部分:

有一个答案,似乎有效,但它很慢.它会添加字符和行,直到填充页面.我不认为这是打破分页的好方法:

它不是这个问题,而是PageTurner电子书阅读器大部分都是正确的,尽管它有点慢.

PageTurner电子书阅读器的屏幕截图


PS:我不局限于TextView,我知道断行和分页算法可能非常复杂(如在TeX中),所以我不是在寻找一个最佳答案,而是一个相当快速的解决方案,可以被用户.


更新:这似乎是获得正确答案的良好开端:

有没有办法检索TextView的可见行数或范围?

答:完成文本布局后,可以找到可见文本:

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)

java pagination android textview android-layout

38
推荐指数
3
解决办法
5740
查看次数

从数据集中随机抽样,同时保留原始概率分布

我从测量中收集了一组> 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)

我不知道它是否按我的意愿工作,因为我按照测量的顺序使用数据,这有很大的串行相关性.

java sampling probability-density

6
推荐指数
1
解决办法
624
查看次数

如何转换基于IE浏览器的Msxml2.XMLHTTP网站,以便它也适用于Firefox?

这是一个仅限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)

javascript xmlhttprequest cross-browser

6
推荐指数
1
解决办法
302
查看次数

在x86_64 linux机器上编译gentoo-bionic

您可能知道,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)

是否有人可以建议解决方法?

ubuntu automake android compilation bionic

5
推荐指数
1
解决办法
544
查看次数

在Javascript中从BLOB URL读取数据

我有一个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?

javascript url blob download

2
推荐指数
1
解决办法
1万
查看次数