- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 ListField 中,我希望能够获取任何给定的长字符串,并且能够将第一行包裹在屏幕宽度内,然后获取剩余的字符串并将其显示在下面并省略其余字符串。现在,这就是我用来检测绘图调用中的换行的方法:
int totalWidth = 0;
int charWidth = 0;
int lastIndex = 0;
int spaceIndex = 0;
int lineIndex = 0;
String firstLine = "";
String secondLine = "";
boolean isSecondLine = false;
for (int i = 0; i < longString.length(); i++){
charWidth = Font.getDefault().getAdvance(String.valueOf(longString.charAt(i)));
//System.out.println("char width: " + charWidth);
if(longString.charAt(i) == ' ')
spaceIndex = i;
if((charWidth + totalWidth) > (this.getWidth()-32)){
//g.drawText(longString.substring(lastIndex, spaceIndex), xpos, y +_padding, DrawStyle.LEFT, w - xpos);
lineIndex++;
System.out.println("current lines to draw: " + lineIndex);
/*if (lineIndex = 2){
int idx = i;
System.out.println("first line " + longString.substring(lastIndex, spaceIndex));
System.out.println("second line " + longString.substring(spaceIndex+1, longString.length()));
}*/
//firstLine = longString.substring(lastIndex, spaceIndex);
firstLine = longString.substring(0, spaceIndex);
//System.out.println("first new line: " +firstLine);
//isSecondLine=true;
//xpos = 0;
//y += Font.getDefault().getHeight();
i = spaceIndex + 1;
lastIndex = i;
System.out.println("Rest of string: " + longString.substring(lastIndex, longString.length()));
charWidth = 0;
totalWidth = 0;
}
totalWidth += charWidth;
System.out.println("total width: " + totalWidth);
//g.drawText(longString.substring(lastIndex, i+1), xpos, y + (_padding*3)+4, DrawStyle.ELLIPSIS, w - xpos);
//secondLine = longString.substring(lastIndex, i+1);
secondLine = longString.substring(lastIndex, longString.length());
//isSecondLine = true;
}
现在,这实际上可以很好地包装任何给定的字符串(假设 y 值已正确偏移,并且仅在字符串宽度超过屏幕宽度后绘制文本,以及之后的剩余字符串),但是,每个当我尝试获取前两行时,如果字符串超出两行,它总是会返回字符串的最后两行。由于我还没有什么想法,有没有更好的方法来做这种事情?
最佳答案
我不完全确定我理解你的问题,但在我看来,你需要一个在两行后放弃的自动换行算法。如果是这种情况,那么这应该有望为您指明正确的方向。
void wrapString(String inputString, int width, Font font){
String line1;
String line2;
if (font.getAdvance(inputString) <= width){
line1 = inputString;
line2 = "";
}
else{
int charsInLine1 = countCharsInLine(inputString, 0, inputString.length()-1, width, font);
int lineBreak = inputString.lastIndexOf(' ', charsInLine1);
if (lineBreak == -1)
lineBreak = charsInLine1;
line1 = inputString.substring(0, lineBreak);
line2 = inputString.substring(lineBreak+1, inputString.length());
if (font.getAdvance(line2) > width){
int charsInLine2 = countCharsInLine(line2, 0, inputString.length()-1, width - font.getAdvance("..."), font);
line2 = line2.substring(0, charsInLine2) + "...";
}
}
System.out.println("line1: " + line1);
System.out.println("line2: " + line2);
}
int countCharsInLine(String str, int min, int max, int width, Font font) {
if (min >= max)
return max;
int guess = min + (max - min) / 2;
int advance = font.getAdvance(str, 0, guess);
if (advance < width)
return countCharsInLine(str, guess+1, max, width, font);
else if (advance > width)
return countCharsInLine(str, min, guess-1, width, font);
else
return guess;
}
关于java - Blackberry ListField 文本换行 - 仅两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187245/
我正在开发一个 BlackBerry 应用程序,该应用程序在应用程序启动时需要启动画面。我还没有找到任何实现闪屏的例子。 我在应用程序的启动类中使用了一个计时器来显示启动图像。 有没有其他方法可以解决
有没有办法从BlackBerry OS中的代码启用Wifi? 谢谢 - 编辑 - 我只想添加代码片段以检查是否已启用WiFi: if ( (RadioInfo.getActiveWAFs() & Ra
Blackberry PlayBook的网络浏览器的User-Agent字符串是什么? 最佳答案 OS 1.0-根据RIM,它是 Mozilla/5.0 (PlayBook; U; RIM Table
我为黑莓做了简单的 java 应用程序,但在构建时出现以下错误。 "Building Hisantosh C:\BlackBerryJDE4.5.0\bin\rapc.exe -quiet impo
我们有几个黑莓应用程序,现在正在努力为 BB 10 做准备。这些应用程序是通过 Eclipse 和/或 RIM IDE 工具用 Java 制作的。然而,当我去 https://developer.bl
我已经实现了黑莓手机推送启动器的前4个步骤 发送推送请求 BlackBerry服务返回响应 BlackBerry服务将数据推送到设备上指定的特定端口 设备返回对BlackBerry服务的响应 现在,我
我有一个与黑莓 Storm 配对的蓝牙耳机。每当我打开/关闭耳机时, Storm 都会显示耳机已连接或断开连接的消息,并更新蓝牙指示灯图标。我想在我的应用程序中检测到耳机连接更改事件。我如何捕获事件变
如何在 BlackBerry 中实现图像按钮? 最佳答案 给你,完整的代码: import net.rim.device.api.system.Bitmap; import net.rim.devic
我下载了 BlackBerry 的 Eclipse 插件,它默认运行 BlackBerry OS 7。我需要针对 BlackBerry OS 6 和 OS 7 设备。这是否也适用于 BlackBerr
我正在尝试为黑莓浏览器找到一个好的模拟器,以便我可以尝试我的黑莓应用程序。 有没有在线版本所以我不必下载和安装一个? 或者在更糟糕的情况下,我应该下载哪一个? 谢谢, 最佳答案 RIM 提供了一些模拟
我正在编写一个自定义对话框窗口来显示长时间操作的状态,并希望使用 BB native 对话框中使用的小计时器图标(OS >= 4.6 上的小方形时钟)。 如何在我的对话框中使用此图形? 我已经熟悉布局
我想自定义出现在树 View 左侧的 (+) 符号 是否可以 我想在那个地方放置图像 我尝试自定义和搜索论坛以及黑莓论坛,其中一个说这是不可能的,但后来 我得到了一个链接,如下所示,这是可能的 htt
我在应用商店中有一个BlackBerry应用。我想从网页链接到该应用程序,因此,如果用户在浏览器中转到该页面并单击链接,则将启动BlackBerry AppWorld应用程序,并且用户将能够轻松下载
我正在尝试使用 Java + JDE 以编程方式拒绝黑莓上的调用。 我正在拦截 callIncoming事件,在那里我需要做一些事情来拒绝来自特定号码的调用。 有谁知道这是怎么做到的吗? 最佳答案 我
我想知道为 BlackBerry 开发的人是如何在他们的应用程序中管理屏幕的。最常见的做法(也是我正在使用的做法)似乎只是实例化并从当前屏幕推送新屏幕。我见过的另一个选项是使用 Main Applic
我为 BlackBerry 开发了一个订单处理应用程序。当我查看 bin 文件夹时,我看到 100 多个 .class文件。 我创建了一个用于添加新客户端的主屏幕类。屏幕有 7 个 LabelFiel
创建黑莓应用程序。 只是一个初学者,我已经搜索过但无法找到解决方案,尽管它很常见。如果有人能告诉我如何在 Java 中为黑莓应用程序显示密码提示和数字提示。 提前致谢!! 最佳答案 According
我在应用程序中使用树 View 来显示黑莓中的客户端服务器数据。我通过使用可扩展的 ListView 项目在 android 应用程序中实现了同样的事情。但在这里我面临两个问题 一种是: 我想添加父节
这是一个愚蠢的问题,但我知道黑莓的经典风格 JDE 开发,但我从未尝试过使用 WebWorks。 BB 网站表示可以为智能手机(OS 6.0+)和平板电脑构建应用程序 - 听起来很棒,但价格是多少?
我有兴趣为 BlackBerry 设备开发应用程序,想知道他们是否支持为应用程序开发人员提供演示版或测试版的概念?通过这个,我的意思是能够将我的应用程序的测试版或演示版部署到有限/受限的受众,例如业务
我是一名优秀的程序员,十分优秀!