2016-11-30 4 views
0

Ich habe einen einfachen EditText mit layout_width="wrap_content". In den Attributen gibt es keine Abstände oder Ränder. Hier ist ein vollständiges Beispiel:Was kann Android beeinflussen: ems Größe?

<EditText 
     android:id="@+id/maskPrefix" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="3" 
     android:inputType="text|textCapCharacters|textNoSuggestions" 
     android:maxLength="5" 
     android:maxLines="1" 
     android:nextFocusDown="@+id/maskNum" 
     android:text="GA" 
     android:textSize="18sp" 
     tools:ignore="LabelFor" /> 

Alles ist in Ordnung, aber ... Aber:

  1. Wenn ich ems auf 1 gesetzt, es ist etwa 1 Zeichen breit;
  2. Wenn ich ems auf 2 setze, ist es etwa 2,5 Zeichen breit;
  3. Wenn ich ems auf 3 setze, ist es etwa 4,5 Zeichen breit;
  4. Wenn ich ems auf 4 setze, ist es etwa 6 Zeichen breit;
  5. Wenn ich ems auf 5 setze, ist es etwa 10 Zeichen breit;
  6. Wenn ich ems auf 10 setze, ist es etwa 20 Zeichen breit;

Wenn ich android:ems entfernen und stattdessen maximale Breite über android:maxLength einstellen, dann ist alles angemessen Breite. Aber ich brauche beide Attribute.

Warum ist meine EditText Breite falsch? Was ist mit diesem mysteriösen Multiplikator? Ich benutze Theme.AppCompat.Light.NoActionBar, neuesten Android-Studio (2.2.2) und kompilieren mit

compile "com.android.support:support-v4:25.0.1" 
compile 'com.android.support:appcompat-v7:25.0.1' 

Testing mit Android 6 in Nexus 5.

Welche Möglichkeit oder Attribut könnte Chaos android:ems so schlecht?

UPD. Link zu löst mein Problem in keiner Weise. Außerdem ist es absolut richtig, sowohl android:textSize als auch android:ems einzustellen. Ich möchte Buchstaben meines Textes sein x sp groß und ich will, dass meine EditTexty Zeichen breit ist.

+0

Sie setzen beide 'text_size' und' ems'. Überprüfen Sie diese http://stackoverflow.com/questions/10275348/what-is-androipems-attribute-in-edit-text – Chisko

+0

@ Chisko Yup, ich setze beide, weil ich beide brauche. Und deine Verbindung ohne jede Erklärung ist ziemlich nutzlos.Es scheint, als ob du dachtest, dass dies Werte für denselben Zweck sind. Dann überprüfe noch einmal deinen eigenen Link;) – Jehy

Antwort

1

Okay, ich habe den Schuldigen gefunden. Ich dachte, dass ems Größe x immer für alle Zeichen gleich sein wird. Aber ich habe komplett vergessen, dass wir Monospace und Proportional Fonts haben. Und wenn wir ems auf x setzen, wird es x * y sein, wobei y die Breite des breitesten Buchstabens ist (normalerweise M). Aber die Breite der anderen Buchstaben wird kleiner sein. Es ist auf diesem Bild klar:

M is wider then 1

"M" Buchstaben ist viel breiter als "1"!

Lösung: Wir können einfach wechseln Schriftart Monospace, wie serif-monospace:

monospace font is cool

Verwandte Themen