2011-12-19 18 views
7

Nella mia applicazione ho 2 tipi di campi di modifica. Uno di loro si comporta come un campo di modifica a riga singola, l'altro si comporta come un campo di modifica a più righe (editarea). In questa schermata ho un'intestazione, un campo di edit e una editarea. Quando inserisco del testo a editfield, esso ritaglia il testo e il cursore. Ma, quando inserisco del testo a editarea che include un carattere a coda (y, g, q, p) l'altezza di editarea sta cambiando e editfield è normale. Se non inserisco caratteri personalizzati, lo studio non cambia.editfield altezza strana

Ecco la mia classe EditArea:

public class EditAreaField extends HorizontalFieldManager{ 
    private net.rim.device.api.ui.component.EditField editArea; 
    public EditAreaField(){ 
     // some code; 
     editArea.setPadding(25, 10, 0, 10);  
    } 
    public int getPreferredHeight() { 
     int height = Math.max(editArea.getHeight(), textFont.getHeight()); 
     return height + editArea.getPaddingTop(); 
    } 
} 

label1 -> editfield

label2 -> EditArea

enter image description here enter image description here

+0

puoi spiegarci brevemente? –

+0

bene ho fatto spiegare nella domanda in realtà. Nell'immagine a sinistra puoi vedere, c'è un problema di ritaglio: metà del cursore è sopra il primo carattere, metà è nell'ultimo carattere. Se si digita un carattere in coda, l'errore di ritaglio non esiste più. –

+0

puoi per favore venire qui discuteremo di più su questo http://chat.stackoverflow.com/rooms/4014/knowledge-sharing-center-for-blackberry-and-java –

risposta

1

questo è perché si stanno facendo la dimensione di cambiare utilizzando

int height = Math.max(editArea.getHeight(), textFont.getHeight()); 

invece di provare a dare dell'altezza fissa. per esempio

height= Graphics.getScreenHeight()/5; 

o si può anche utilizzare SetExtent all'interno del metodo sublayout del gestore

 protected void sublayout(int maxWidth, int maxHeight) 
      { 
       layoutChild(_editField, _editField.getPreferredWidth(), _editField.getPreferredHeight()); 
       setPositionChild(_editField, xpos,ypos); 
       setExtent(preferredHeight,preferredWidth); 
      } 

penso che funzionerà. prega fatemi sapere

+0

editfield è una dimensione fissa ma editarea non dovrebbe essere riparata perché non sappiamo quanti caratteri verranno inseriti dall'utente. Inoltre ho impostato l'estensione all'interno del metodo di sublayout sovrascrivendolo come hai detto. è l'altezza di editarea strana è 38 quando inizializzato, quando l'utente inserisce caratteri tailed che sta cambiando a 39. C'è il problema che penso. –

1

Circa il dipinto del cursore - avete fatto ignorare drawFocus o/e onFocus e/o onUnfocus e fanno si ridisegna correttamente qualche volta.

+0

ho overrode su Focus e onUnfocus. il componente personalizzato che ho aggiunto la stessa schermata nelle immagini si comporta in modo diverso. Se c'è un problema sull'immagine sinistra, il problema deve rimanere nell'immagine giusta. la fonte del problema è la componente editarea che penso ma non sono in grado di risolverlo. –