2013-10-09 10 views
5

Niestety nie jestem w stanie wykonać elipsy dla prac EditText. Czy możliwe jest umieszczenie trzech kropek na końcu tekstu, gdy tekst jest zbyt długi? Działa doskonale dla TextiView, ale nie dla EditText. Jakiś pomysł?Editlipext ellipsize (trzy kropki ...)

android:id="@+id/ed_email_personalInfo" 
android:layout_width="match_parent" 
android:layout_height="55dp" 
android:background="@color/transparent" 
android:ellipsize="end" 
android:ems="10" 
android:hint="@string/email" 
android:inputType="textEmailAddress" 
android:maxLength="64" 
android:paddingLeft="10dp" 
android:paddingRight="10dp" 
android:singleLine="true" 
android:textColorHint="@color/col9a9a9a" 
android:textSize="15.7sp" 

Odpowiedz

0

Może nie być możliwe w EditText (chyba że utworzysz własny widok). Myślę, że domyślne zachowanie (dla singleLine EditText) polega na tym, że możesz przewijać tekst na boki, gdy nie mieści się on w widoku.

13

Ustaw tę właściwość do edycji tekstu. Elipsize pracuje z wyłączenie edycji tekstu

android:lines="1" 
    android:scrollHorizontally="true" 
    android:ellipsize="end" 
    android:singleLine="true" 
    android:editable="false" 
+0

Dzięki, działało idealnie dobrze :) –

+0

To działa. Nie ma potrzeby ustawiania właściwości scrollHorizontally i lines. –

+2

Android: właściwość edytowalna jest przestarzała, a Google zaleca korzystanie z Androida: inputType. Jednak zgodnie z moim testem, nie będzie działać, jeśli istnieje android: inputType – Jacky

-2

co potrzeba napisać nową klasę, która rozciąga EditText. na przykład:

MyEditTextEllipsize extends EditText{ 

private String dotsString; 

private String storeString; 

public MyEditTextEllipsize(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

@Override 
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 

     if(focused) 

    { 
     setText(storeString); 
     }else { 
      String NOW = getText().toString(); 
       storeString = NOW; 
      if (NOW != null && getWidth() <= getTextSize() * NOW.length()) { 

        dotsString = NOW.substring(0, (int) (getWidth()/getTextSize())) + "..."; 

        setText(dotsString); 

       } 
} 

    } 
} 
9

Musisz usunąć atrybut android:inputType.

Elipsa nie działa, jeśli zdefiniowano inputType.