Ich versuche, das Verhalten der Attribute cols
und size
für textarea und Eingabetext respektvoll zu verstehen. Obwohl es etwas geradlinig sein sollte, kann ich nicht herausfinden, warum haben sie unterschiedliche Breiten, wenn die Spalten- und Größenwerte gleich sind?
Laut der Dokumentation sollten beide Attribute die Elemente so dimensionieren, dass eine bestimmte Anzahl von Zeichen darin passen kann:
... size Attribut gibt die sichtbare Breite in Zeichen an ein Eingabeelement [source - w3schools]
Beachten Sie, dass die Spalten und die Zeilenattribute (...) angeben, wie viele Spalten groß und Zeilen breit sein sollen der Textbereich. Die Werte sind in Zeichen . [source - w3]
Wenn ich jedoch versuche, beiden Elementen den gleichen Wert zuzuweisen, haben sie unterschiedliche Breiten. Das Eingabefeld ist ein bisschen zu klein, um die gegebene Anzahl von Zeichen und die Textfläche aufzunehmen - zu breit. Am wichtigsten ist, beide haben unterschiedliche Breite.
Zum Beispiel:
%Vor%erzeugt:
siehe hier - Ссылка
Ich habe das sowohl in Chrome 29 als auch in Firefox 24 versucht.
Ich verstehe, dass die Breite von den Schriftstilen abhängt, aber sollten nicht beide Elemente immer die gleiche Breite haben? Sind interne Margen des Elements oder etwas anderes, das diesen Unterschied verursacht?
AKTUALISIEREN
Es scheint, dass die beiden Elemente unterschiedliche Schriftstile haben, aber die Zuweisung der gleichen Schriftfamilie und Schriftgröße erzeugt immer noch unterschiedliche Breiten:
"Sichtbare Breite in Zeichen" ist ein vager Ausdruck, da in den meisten Schriftarten die Breite der Zeichen variiert. Sie können also nicht erwarten, ein Steuerelement zu erhalten, das eine genaue Anzahl von Zeichen enthält, es sei denn, Sie verwenden eine Monospace-Schriftart.
Es gibt zwei grundlegende Dinge, die dazu führen, dass sich die Breiten von input
und textarea
unterscheiden. Erstens sind die Standardschriftarten unterschiedlich: eine Monospace-Schriftart für textarea
, eine Sans-Serif-Schriftart für input
, in den meisten Browsern. Dies führt zu unterschiedlichen Breiten, sogar für die gleiche Schriftgröße. Zweitens enthält ein Widget textarea
rechts einen kleinen Bereich, der bei Bedarf für die vertikale Bildlaufleiste verwendet wird. effektiv, das Element hat overflow: auto
standardmäßig. Sie könnten es mit overflow: hidden
entfernen, aber dann wird es ein großes Problem geben, wenn der Benutzer mehr Zeilen eingibt, die in den Bereich passen.
Wenn Sie die Elemente wirklich gleich breit machen möchten (ich glaube nicht, dass Sie das sollten), können Sie die Schriftart und die Breite explizit festlegen, z. B.
%Vor%Da dies die meiste Zeit gut funktioniert, muss ich annehmen, dass zwischen onCreate und den geladenen Ressourcen eine Art Race-Bedingung besteht.
Wenn die gleiche APK-Datei - keine Neukompilierung, keine Neuinstallation usw. - den Fehler nicht konsistent erzeugt, dann könnte es eine Art Race Condition sein, obwohl mich das überraschen würde.
Wenn die same APK-Datei konsistent fehlschlägt, dann ist dies eine größere Vielfalt an Ressourcen, die nicht mit dem Rest des Code-Problems synchronisiert sind, und das Säubern der Projekt wird es aufräumen.
Gibt es einen besseren Ort, um einen Dienst zu initialisieren, wenn die Anwendung gestartet wird?
Meiner Meinung nach ist die Anzahl der Apps, die einen Dienst beim Start der Anwendung initialisieren müssen, extrem niedrig, und ich kann mir kein Szenario ausdenken, wo dies ein guter Plan wäre. Das soll nicht heißen, dass du kein solches Szenario hast, aber es ist ein ernsthafter Code-Geruch in meinem Buch ohne eine Erklärung.
Ich habe festgestellt, dass in Fällen, in denen viele Ressourcen verwendet werden (und in R.java generiert werden), das Bereinigen der Anwendung vor der Ausführung diese Probleme behebt. Ich würde also annehmen, dass dies keine Race Condition ist - aber ein Problem mit Eclipse oder dem Android SDK mit nicht erfrischenden Ressourcen. Was die Platzierung des Codes betrifft - es ist meiner Meinung nach so gut wie jede andere Option.
Ich habe die folgende Anwendungsklasse für meine App. Wenn die Anwendung gestartet wird, möchte ich einige Einstellungen aus den Einstellungen abrufen und einen Hintergrunddienst starten.
%Vor%Das funktioniert normalerweise gut, aber gelegentlich, wenn ich mein Programm von Eclipse "Run" starte, erhalte ich diesen Fehler:
%Vor%Diese ID stammt von meinem R.java:
%Vor%Da dies die meiste Zeit gut funktioniert, muss ich davon ausgehen, dass zwischen onCreate und den geladenen Ressourcen eine Art Wettlaufsituation besteht.
Wenn das der Fall ist, wird empfohlen, Ressourcen in der Anwendung onCreate nicht zu lesen?
Wenn ja, gibt es einen besseren Ort, um einen Dienst beim Start der Anwendung zu initialisieren?