2016-03-02 1 views
12

Comment puis-je obtenir l'état de verrouillage des majuscules dans Android à l'aide d'un clavier physique? en Java, il peut être détecté avecObtenir l'état de verrouillage des majuscules dans Android

boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); 

Mais cela ne fonctionne pas avec Android ...

+0

Utilisez l'attribut suivant pour votre EditText dans votre fichier xml ** android: inputType = "textCapCharacters" ** – malli

+0

Mais cela n'écrit automatiquement que des majuscules? – Kewitschka

+0

Correct dites-moi votre scénario quelle est la fonctionnalité que vous attendez de ce .. – malli

Répondre

4

À essayer (ne pas le tester):

public class CustomEditText extends EditText{ 


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

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

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

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(event.isCapsLockOn()){ 
     //Do what Ever 
    } 
    return super.onKeyDown(keyCode, event); 
} 

}

isCapsLockOn

+0

event.isCapsLockOn() l'a fait. Merci mec! – Kewitschka

+0

Veuillez noter ce qui suit à partir de [doc] (http://developer.android.com/reference/android/widget/TextView.html): 'Les pressions de touches dans les claviers logiciels ne déclenchent généralement PAS cet auditeur, bien que certains puissent choisir de le faire dans certaines situations. Ne comptez pas sur cela pour attraper les touches de logiciels. » – user2340612

+0

clavier logiciel ... il a posé des questions sur le clavier matériel. L'application de clavier logiciel native déclenche également l'auditeur (comme swiftkey) et c'est la meilleure solution possible – royB

2

Je ne pense pas qu'il y ait une API Android qui permet de détecter l'état de capslock. Mais j'ai son alternative. Si vous souhaitez détecter que CAPSLOCK est activé ou désactivé, il est préférable d'utiliser TextWatcher pour votre EditText.

mEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      String character = s.toString(); 
      /* 
      Matche entered character with Rajex wheter its capital or small 
      */ 
      if (Pattern.matches("[a-z]",character)) { 
       Log.e("","CapsLock is OFF"); 
      } 
      else if (Pattern.matches("[A-Z]",character)){ 
       Log.e("", "CapsLock is ON"); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
+0

Pour mon problème, il est nécessaire de connaître l'état de verrouillage des majuscules, car je veux empêcher 2 lettres majuscules d'affilée SAUF le verrouillage des majuscules est activé. – Kewitschka

+0

@Kewitschka Désolé mais je n'ai pas d'autre solution, vous pouvez attendre que quelqu'un d'autre réponde à votre question. Tout le meilleur, si vous obtenez une solution postez sur ce fil, il pourrait aider les autres. –

+0

La solution correcte est déjà acceptée. Merci quand même – Kewitschka

1

Vous pouvez utiliser android:inputType="textCapSentences" dans votre editText, si vous voulez faire la première lettre , commencez avec des bouchons. Il y a aussi d'autres options, si vous voulez un comportement différent.