2016-06-22 11 views
1

Mit Alloy habe ich ein Textfeld und möchte die Schriftgröße verkleinern, wenn der Benutzer mehr als 24 Zeichen eingibt, damit nichts im Textfeld abgeschnitten wird.Wie kann die Schriftgröße in einem Textfeld dynamisch mit Appcelerator eingestellt werden?

views.xml:

 <TextField id="ccHolder" class="fieldInput" onChange="makeFontSmaller"><Label id="cvcIcon" class="fieldIcons"/> </TextField> 

controller.js:

function makeFontSmaller(e){ 
     console.log("font size " + e.source.font.fontSize); //outputs "14dp" 
     if (e.source.value.length > 20) { 
      e.source.font.fontSize = "12dp"; //no effect 
     //$.ccHolder.value.setFont("12dp"); /no effect 
    } 
} 

Irgendwelche Ideen?

Antwort

1

verwendet Das funktioniert gut, wenn Sie nur die Schriftart ändern möchten.

e.source.font = { 
    fontSize : 14 
}; 
+0

Danke! Das hat den Trick gemacht – user24957

0

[redigierte das Font-Objekt zu korrigieren]

In meiner ersten Antwort zu bearbeiten, ich naiv hatte gehofft, dass font.fontSize eine legitime Eigenschaft sein könnte, aber es ist eindeutig nicht.

Dann, nach Prashant Kommentare testete ich erfolgreich die (ausführlichere) Lösung unten, die applyProperties()

function makeFontSmaller(e){ 
    if (e.source.value.length > 20) { 
     e.source.applyProperties({font: {fontSize: "12dp"}}); 
    } 
} 
+0

Wir können nicht direkt wie diese applyProperties * font.fontSize: „12dp“ *, können wir ... Studio zeigt einen Fehler auf font.fontSize –

+0

ich sehe, danke, ich war wirklich besorgt über Das. –

+0

vielleicht mit {font: {fontSize: "12dp"}} ... Ich würde es aus Neugierde versuchen :) thnx wieder Prashant. –