2012-01-07 10 views
16

Mam jeden EditText w moim układzie. Po wprowadzeniu przez użytkownika tekstu i naciśnięciu klawisza "done", chciałbym usunąć z niego migający kursor. Przeszukałem StackOverflow i znalazłem 3 odpowiedzi, które nie działały dla mnie. Migający kursor nadal pozostaje.Jak usunąć ostrość z EditText po zakończeniu edycji przez użytkownika?

private class MyOnKeyListener implements OnKeyListener { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN 
    && keyCode == KeyEvent.KEYCODE_ENTER) { 
     // FAIL 0 
     MyActivity.this.findViewById(R.id.someOtherView).requestFocus(); 

     // FAIL 1 
     InputMethodManager imm = (InputMethodManager)getSystemService(
     Context.INPUT_METHOD_SERVICE 
    ); 
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 

     // FAIL 2 
     MyActivity.this.getWindow().setSoftInputMode(
     WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN 
    ); 

     return true; 
    } else { 
     return false; 
    } 
    } 
} 

Odpowiedz

23

Można użyć atrybutu xml,

android:cursorVisible 

czy można to zrobić w kodzie z tej metody.

setCursorVisible(boolean). 
+0

Naprawiono to. Robi to również dobrze, odsłaniając kursor, gdy klawiatura jest otwarta. Ukrywa tylko kursor, gdy go nie edytujesz. – JoJo

+0

WIsh Mogę dać więcej głosów, ponieważ znalazłem 10 innych skomplikowanych odpowiedzi, które nie zadziałały przed znalezieniem tego. Dzięki. – Glenn

+0

Mam ten problem: http://stackoverflow.com/questions/23677895/saving-an-edittext-to-bitmap ----- Dzięki temu rozwiązaniu, pin też jest ukryty! Ale chcę ukryć tylko pionową linię migania. –

1

wystarczy ustawić ostrość na przycisk Gotowe.

+1

Czy to nie jest jego przykład błędu? – Dante

-1

jeśli nie chcesz, aby był w ogóle edytowalny, powiedziałbym, wykonaj poniższe czynności;

EditText orgid; 
orgid.setText(user.getOrgId()); 
orgid.setEnabled(false); 
2

Fail 0:

Wywołanie .requestFocus() na jakimś elemencie układu nie wystarczy, jeśli element nie może być aktywowana w trybie dotykowym. Jeśli chcesz ustawić ostrość na widoku lub przycisk, który trzeba zadzwonić

.setFocusableInTouchMode(true); 

pierwszy lub ustawić go w .xml

+0

To rozwiązało problem dla mnie. Dzięki! –

10

Korzystanie poniższy kod, aby usunąć zaznaczenie z EditText

editText.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View view, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_ENTER) { 
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); 
        editText.setFocusable(false); 
        editText.setFocusableInTouchMode(true); 
        return true; 
       } else { 
        return false; 
       } 
      } 
     }); 
+0

wyszukiwanie z ostatnich 2 dni ... uzyskiwanie wielu rozwiązań .. nic nie działało ... twoje rozwiązanie jest doskonałe .. ty – Abhi

+1

Co to jest URLText? –

6

Oto mój zwyczaj EditText które wykrywają czy klawiatura jest wyświetlana & automatycznie usunąć ostrość, gdy klawiatura jest ukryty

/** 
* Created by TheFinestArtist on 9/24/15. 
*/ 
public class KeyboardEditText extends EditText { 

    public KeyboardEditText(Context context) { 
     super(context); 
    } 

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

    public KeyboardEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void setOnTouchListener(OnTouchListener l) { 
     super.setOnTouchListener(l); 
    } 

    @Override 
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
     super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     if (listener != null) 
      listener.onStateChanged(this, true); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK 
       && event.getAction() == KeyEvent.ACTION_UP) { 
      if (listener != null) 
       listener.onStateChanged(this, false); 

      // Hide cursor 
      setFocusable(false); 

      // Set EditText to be focusable again 
      setFocusable(true); 
      setFocusableInTouchMode(true); 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

    /** 
    * Keyboard Listener 
    */ 
    KeyboardListener listener; 

    public void setOnKeyboardListener(KeyboardListener listener) { 
     this.listener = listener; 
    } 

    public interface KeyboardListener { 
     void onStateChanged(KeyboardEditText keyboardEditText, boolean showing); 
    } 
} 
+1

To nie działa. Metoda 'onKeyPreIme' nie wywołuje. – rkyr

+0

@rkir dlaczego? to działa dla mnie, wypróbowałem kilka urządzeń –

+0

@KirillVashilo, nie mogę powiedzieć teraz. Minęło trochę czasu, odkąd stanąłem przed tym problemem. Prawdopodobnie na urządzeniu KitKat – rkyr

Powiązane problemy