Estou tendo problema com o tamanho da fonte no meu celular … o maior problema é que quero elas bem maiores do que estão … quando usei para aumentar a fonte em tipos List … não tive nenhum … assim como, quando aumentei a fonte de StringItem e ChoiceGroup … mas ao tentar aumentar a letra que aparecia no TextField não encontrei uma solução …
alguém saberia como aumentar a fonte num TextField???
[quote=Norxs]Estou tendo problema com o tamanho da fonte no meu celular … o maior problema é que quero elas bem maiores do que estão … quando usei para aumentar a fonte em tipos List … não tive nenhum … assim como, quando aumentei a fonte de StringItem e ChoiceGroup … mas ao tentar aumentar a letra que aparecia no TextField não encontrei uma solução …
alguém saberia como aumentar a fonte num TextField???[/quote]
Você então deve saber tanto como eu que não há como fazer isto, usando o componente TextField. Agora se for partir para fazer o SEU, a situação é diferente. Respondi o que perguntou e a pergunta foi sobre TextField, portanto a resposta continua a mesma. Não é possível.
public class MTextField extends CustomItem {
private TextField tf = new TextField(null, null, 80, TextField.ANY);
private String string;
private Font font;
public MTextField(){
super(null);
this.string = new String("");
this.font = null;
}
public void paint(Graphics g, int w, int h) {
int wMin = 0;
int hMin = 0;
int wMax = w-1;//tf.getPreferredWidth()-1;
int hMax = h-1;//tf.getPreferredHeight()-1;
g.drawLine(wMin, hMin, wMin, hMax);
g.drawLine(wMin, hMin, wMax, hMin);
g.drawLine(wMax-1, hMin, wMax-1, hMax);
g.drawLine(wMin, hMax, wMax, hMax);
if(font!=null) g.setFont(font);
g.drawString(string,1,0,0);
//Paint ur own stuff here
}
public Font getFont() {
return font;
}
public void setFont(Font font) {
this.font = font;
}
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
protected int getPrefContentHeight(int height){
return tf.getPreferredHeight();
}
protected int getPrefContentWidth(int width){
return tf.getPreferredWidth();
}
protected int getMinContentHeight(){
return tf.getMinimumHeight();
}
protected int getMinContentWidth() {
return tf.getMinimumWidth();
}
protected void keyPressed(int keyCode){
//write ur code here to do stuff
if(keyCode==-8)
string = string.substring(0, string.length()-1);
else
string += String.valueOf(keyName(keyCode));
repaint();
}
private char keyName(int keyCode){
switch(keyCode){
case 49:
return '1';
case 50:
return '2';
case 51:
return '3';
case 52:
return '4';
case 53:
return '5';
case 54:
return '6';
case 55:
return '7';
case 56:
return '8';
case 57:
return '9';
case 48:
return '0';
}
return ' ';
}
}
[/code]
só estou com o problema de que não consigo capturar outras teclas … só capturo as com número … alguém sabe outra função além da protected void keyPressed(int keyCode) … para capturar as outras teclas???
Basta você saber o código (keycode) das outras que não sejam numéricas.
Outra forma de trabalhar isso é sobrepondo o método traverse da classe CustomItem. Eu consegui trabalhar algumas teclas a partir dele… é bem chatinho de trabalhar com ele, demorei entendê-lo.
Veja um exemplo:
/*Abstract da CustomItem. Movimena uma lista para baixo de acordo com as teclas precionadas.*/
public boolean traverse( int dir, int viewportWidth, int viewportHeight, int[] visRect_inout ){
switch(dir){
case Canvas.UP:
case Canvas.LEFT:
if( itemSelecionado > 0 ){
--itemSelecionado;
notifyStateChanged();
} else {
itemSelecionado = num-1;
notifyStateChanged();
}
break;
case Canvas.DOWN:
case Canvas.RIGHT:
if( itemSelecionado < num-1 ){
++itemSelecionado;
notifyStateChanged();
} else {
itemSelecionado = 0;
notifyStateChanged();
}
break;
case NONE:
return true;
}
makeSelectedVisible();
repaint();
return true;
}
Repare que com a classe Canvas eu consigo capturar outras teclas como Canvas.DOWN, Canvas.UP, etc.
Quanto ao tamanho das fontes:
Há uma forma de utilizar a fonte do tamanho que você deseja em classes herdadas da CustomItem ou da Canvas… porém é complicado, você terá que fazer uma imagem com todos os caracteres do tamanho e estilo que você deseja, de preferência com a mesma largura para todos. Depois crie uma classe Fonte onde no construtor você carrega a imagem que contém todos os caracters. Crie um método getCaracter(char c), neste método ponha um switch com case para cada caracter e em cada case você recorta o caracter desejado da imagem que contém todos os caracteres. Para fazer o recorte da imagem você deve saber em qual pixel começa cada caracter e qual sua largura e altura e especificar isso nos cases… daí você pode fazer diversas outras coisas, estou te dando a dica inicial.
Também pode fazer uma imagem com todos os caracteres na mesma sequência que a tabela ASCII e capturar a imagem do caracter desejado passando como atributo o byte do caracter que você quer… e por aí vai. Ja fiz das duas formas, esta segunda é bem mais eficiente. Tem um link da Sun que ensina isso, se eu achar postarei aqui.
hum … interessante … mas tem um problema de que eu estou desenvolvendo para um htc … e esse mobile tem um tecla (semelhante ao blackberry) … mas tem o problema de que algumas teclas não são capturadas quando uso o keyPressed … são duas na verdade … o shift e o alt …
No BlackBerry por exemplo, certas teclas você não consegue capturar a não ser que faça o aplicativo usando a API natual ddele que, no caso do BlackBerry, é a RIMlet.