В моем ListField я хочу иметь возможность взять любую заданную длинную строку и просто иметь возможность обернуть первую строку в ширину экрана и просто взять оставшуюся строку и отобразите его ниже и эллипсис остальное. Прямо сейчас, это то, что я использую, чтобы обнаружить обертывание в моем розыгрыше краски вызова:Blackberry ListField Text Wrapping - только две строки
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 значения были правильно offsetted и только обратил текст после ширины строки превысил ширину экрана, а также оставшуюся строку), однако каждый раз, когда я пытаюсь получить первые две строки, он всегда заканчивает возвращение двух последних строк строки, если он выходит за рамки двух линий. Есть ли лучший способ сделать такие вещи, так как я свеж от идей?
Спасибо за помощь, пока он действительно работает, когда ему не нужно выполнять проверку пересылки второй строки, так как после попытки компенсировать ширину многоточия, она ломается, пытаясь угадать длину символа. Тем не менее, я смог адаптировать этот же алгоритм с вызовами drawText в отдельной функции и позволить эллипсису второй линии от вызова краски. Пока что спасибо за помощь, хотя я хотел бы знать, можете ли вы вернуться к расчету догадок только для пинков. –