2011-04-07 4 views

Répondre

273

Vous pouvez utiliser l'attribut xml android:cursorVisible="false" ou la fonction Java setCursorVisible(false).

+7

impressionnant, ce ainsi onclicklistener qui le rend visible donne le comportement correct :) – Warpzit

+0

android: cursorVisible = "false "(a travaillé pour moi. merci) –

+0

@cerin est-il un moyen de cacher le marqueur bleu afin que je puisse désactiver la pâte, mais garder le curseur visible pour que l'utilisateur puisse voir où il est sur le terrain? – limlim

23

solution parfaite qui va plus loin à l'objectif

Objectif: Désactiver le curseur clignote lorsque EditText est pas au point, et activer le curseur clignote lorsque EditText est mise au point. Ci-dessous ouvre également le clavier lorsque vous cliquez sur EditText, et le cache lorsque vous appuyez sur terminé dans le clavier.

1) Définir dans votre xml sous votre EditText:

android:cursorVisible="false" 

2) Set onClickListener:

iEditText.setOnClickListener(editTextClickListener); 

OnClickListener editTextClickListener = new OnClickListener() 

{ 

    public void onClick(View v) 
    { 
     if (v.getId() == iEditText.getId()) 
     { 
      iEditText.setCursorVisible(true); 
     } 

    } 
}; 

3) puis onCreate, capturer l'événement lorsque vous avez terminé est pressé à l'aide OnEditorActionListener à votre EditText , puis setCursorVisible(false).

//onCreate... 

iEditText.setOnEditorActionListener(new OnEditorActionListener() { 

      @Override 
      public boolean onEditorAction(TextView v, int actionId, 
        KeyEvent event) { 
        iEditText.setCursorVisible(false); 
       if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
       } 
       return false; 
      } 
     }); 
+5

KeyEvent.KEYCODE_ENTER ne fonctionnera pas pour tous les claviers. Vous devrez mentionner spécifiquement android: imeOptions = "actionDone" dans la mise en page, puis gérer EditorInfo.IME_ACTION_DONE également. – PsyGik

+0

Grande réponse juste doit remplacer sur le clic avec au toucher parce que certains temps modifier le texte gagner le focus sans cliquer alors dans ce cas le curseur ne sera pas affiché – Tony

1

Dans mon cas, je voulais activer/désactiver le curseur lorsque l'édition est mise au point.

Dans votre activité:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View v = getCurrentFocus(); 
     if (v instanceof EditText) { 
      EditText edit = ((EditText) v); 
      Rect outR = new Rect(); 
      edit.getGlobalVisibleRect(outR); 
      Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY()); 
      System.out.print("Is Keyboard? " + isKeyboardOpen); 
      if (isKeyboardOpen) { 
       System.out.print("Entro al IF"); 
       edit.clearFocus(); 
       InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); 
      } 

      edit.setCursorVisible(!isKeyboardOpen); 

     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 
+0

Vous êtes sûr que vous voulez 'edit.setCursorVisible (! IsKeyboardOpen);' être 'edit. setCursorVisible (isKeyboardOpen); 'de sorte que le curseur soit visible lorsque le clavier est présent. –

2

Vous pouvez utiliser le code ci-dessous pour activer et désactiver le curseur de texte modifiable par programmation.

Pour activer le curseur

editText.requestFocus(); 
    editText.setCursorVisible(true); 

Pour désactiver le curseur

editText.setCursorVisible(false); 

Utilisation de XML permet de désactiver le curseur

android:cursorVisible="false/true" 
    android:focusable="false/true" 

Pour faire edit_text sélectionnable pour (copier/couper/coller/select/sélectionner tous)

editText.setTextIsSelectable(true); 

Pour se concentrer sur écriture en mode tactile lignes suivantes dans XML

android:focusableInTouchMode="true" 
    android:clickable="true" 
    android:focusable="true" 

programme

editText.requestFocusFromTouch(); 

Pour effacer l'accent sur le mode tactile

editText.clearFocus() 
Questions connexes