J'ai créé mon propre customlabelfield, en utilisant ce customlabelfield je peux capable de modifier la couleur de fond, la couleur, la largeur et la taille de police ... Quand j'utilise ce champ label dans la version 4.6 je peux obtenir la sortie attendue le texte n'est pas une suite en ligne simple, alors il arrive automatiquement en deuxième ligne, mais si j'utilise la même chose en version 4.5, le texte ne vient pas à la ligne suivante et parfois il montre la moitié du texte. avoir une idée pour résoudre ce problème pls partager avec moi.Comment créer CustomLabelField quelles suites pour toutes les versions blackberry?
0
A
Répondre
2
Ma mise en œuvre du contrôle de bouton:
- ont une taille fixe, la police et le texte décalé
- si l'étiquette ne peut pas adapter à une seule ligne, montrer l'étiquette dans plusieurs lignes de largeur maximale
- il n'y a plus de lignes peut s'adapter, montrer des points de suspension à la fin de la ligne
alt text http://img297.imageshack.us/img297/8360/multilinebuttons.jpg
Un code de bouton personnalisé:
class CustomButton extends ButtonField {
int mHeight;
int mWidth;
int LEFT_OFFSET = 2;
int TOP_OFFSET = 2;
public CustomButton(int height, int width, String label) {
super(label, CONSUME_CLICK);
mHeight = height;
mWidth = width;
setFont(getFont().derive(Font.PLAIN, 16));
}
public int getPreferredHeight() {
return mHeight;
}
public int getPreferredWidth() {
return mWidth;
}
protected void layout(int width, int height) {
super.layout(mWidth, mHeight);
setExtent(mWidth, mHeight);
}
protected void paint(Graphics graphics) {
int textHeight = getFont().getHeight();
int twoLinesHeight = 2 * textHeight + TOP_OFFSET;
// check if first line fit in button height
int fitHeight = mHeight - 2 * TOP_OFFSET;
if (textHeight <= fitHeight) {
graphics.setColor(Color.WHITE);
String label = getLabel();
int textLenght = getFont().getAdvance(label);
// check if whole label fit in button width
int fitWidth = mWidth - 2 * LEFT_OFFSET;
if (textLenght <= fitWidth) {
graphics.drawText(label, LEFT_OFFSET, TOP_OFFSET);
} else {
Vector lines = splitLabelToLines();
int lineTopOffset = TOP_OFFSET;
int linesCount = lines.size();
for (int i = 0; i < linesCount; i++) {
String line = (String) lines.elementAt(i);
// if lines will not fit in button height, draw ellipsis
int moreLinesHeight = lineTopOffset + twoLinesHeight;
boolean moreLinesFit = moreLinesHeight <= fitHeight;
boolean lastLine = (i == linesCount - 1);
if (moreLinesFit || lastLine) {
graphics.drawText(line, LEFT_OFFSET, lineTopOffset);
lineTopOffset += TOP_OFFSET + textHeight;
} else {
line += "...";
int lineLenght = getFont().getAdvance(line);
if (lineLenght > fitWidth) {
int len = Math.max(0, line.length() - 6);
line = line.substring(0, len) + "...";
}
graphics.drawText(line, LEFT_OFFSET, lineTopOffset);
break;
}
}
}
}
}
private Vector splitLabelToLines() {
int fitWidth = mWidth - 2 * LEFT_OFFSET;
String label = getLabel();
int lbLen = label.length();
Vector lines = new Vector();
int begin = 0;
// while there are more chars in label
while (begin < lbLen - 1) {
// new line
String lnText = "";
// line width in pixels
int lnWidth = 0;
// line width in chars
int lnLen = 0;
// while line fit button width or label chars ends
while ((lnWidth < fitWidth) && (begin + lnLen < lbLen)) {
lnLen++;
lnText = label.substring(begin, begin + lnLen);
lnWidth = getFont().getAdvance(lnText);
}
if (begin + lnLen < lbLen)
lnLen--;
begin += lnLen;
lnText = lnText.substring(0, lnLen);
lines.addElement(lnText);
}
return lines;
}
}
Exemple d'utilisation:
class Scr extends MainScreen {
CustomButton button1;
CustomButton button2;
CustomButton button3;
public Scr() {
add(button1 = new CustomButton(20, 60,
"first buttton it's with a large text"));
add(button2 = new CustomButton(40, 120,
"second buttton it's with a large text"));
add(button3 = new CustomButton(60, 200,
"third buttton it's with a large text"));
}
}
Questions connexes
- 1. Travailler avec les suites Seaside
- 2. Quelles sont toutes les valeurs possibles pour SQLException.getSQLState?
- 3. Quelles versions de Windows sont actuellement les plus populaires?
- 4. Obtenez une liste de toutes les applications installées sur Blackberry
- 5. Rails & reposful_authentication malheurs avec Internet Explorer (toutes les versions)
- 6. toutes les versions soit sous une seule application
- 7. Quelles sont les étapes pour créer un 'ensemble exécutable'
- 8. Selenium Test Suites
- 9. Utilisez NMAKE pour créer toutes les sources dans un répertoire?
- 10. Quelles stratégies existent pour gérer les mises à jour sur plusieurs sous-produits et plusieurs versions?
- 11. Quelles sont les meilleures pratiques pour gérer plusieurs versions d'un projet?
- 12. Puis-je créer des programmes C++ pour BlackBerry (exemples?)
- 13. Comment implémenter bottom-position pour IE6? Et le même problème existe toujours pour IE5, disons, toutes les versions antérieures?
- 14. Suggère de bons addins-tools pour visual studio .net (toutes les versions-2005-2008 etc)
- 15. Quelles versions du framework Microsoft.NET fonctionnent avec Windows Powerhsell?
- 16. Xcode/Cocoa: Quelles sont les différences entre les versions de débogage et de version?
- 17. Comment créer EditField Qui n'accepte que du texte dans Blackberry?
- 18. Comment déboguer les anciennes versions du logiciel?
- 19. Application .NET pour BlackBerry?
- 20. IDE Utilisé pour BlackBerry Developement
- 21. Comment créer un paquet de versions avec maven?
- 22. Comment créer un script pour sauvegarder toutes les bases de données dans SQL Server?
- 23. Comment créer un déclencheur DDL pour toutes les bases de données dans l'instance SQL Server 2005
- 24. Comment créer un pointcut pour intercepter toutes les méthodes d'une classe avec PostSharp?
- 25. Versions - comment ajouter tous les nouveaux fichiers
- 26. Création C# invite pour Blackberry
- 27. Réécrire pour toutes les URL
- 28. Lucene pour Blackberry OS?
- 29. Liste complète des définitions pour les versions Delphi
- 30. Versions Oracle