2016-03-02 20 views
12

Android'de bir donanım klavyesi kullanarak kapak kilit durumunu nasıl edinebilirim? saf Java yılındaAndroid'de kapak kilit durumu alın

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

ile tespit edilebilir Ama bu capslock durumunu tespit edebilen herhangi bir Android API vardır sanmıyorum ... Android ile

+0

Aşağıdaki özniteliği xml dosyanızdaki EditText'iniz için kullanın ** android: inputType = "textCapCharacters" ** – malli

+0

Ancak bu yalnızca büyük harfleri otomatik olarak yazıyor mu? – Kewitschka

+0

Doğru senaryoyu söyle, bundan beklediğiniz işlevsellik nedir .. – malli

cevap

4

Bu deneyin (test etmedi):

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() yaptı. Teşekkürler dostum! – Kewitschka

+0

[doc] 'dan (http://developer.android.com/reference/android/widget/TextView.html) aşağıdakileri dikkate alınız: 'Yazılım klavyelerindeki tuş basışları genellikle bu dinleyiciyi TAMAMLAMADI; bazı durumlarda bunu yapın. Yazılım tuşuna basmak için buna güvenmeyin. ' – user2340612

+0

yazılım klavyesi ... klavye klavyesini sordu. Ayrıca yerel yazılım klavye uygulaması dinleyiciyi tetikler (hızlı anahtar olarak) ve mümkün olan en iyi çözümdür – royB

2

çalışmaz. Ama benim alternatifim var. Eğer CAPSLOCK'un açık ya da kapalı olduğunu tespit etmek istiyorsanız, EditText için TextWatcher'u daha iyi kullanın.

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

Sorunum için kapak kilitleme durumunu bilmek gerekir çünkü bir satırda 2 büyük harf olmasını önlemek için HARİCİ KAPATMA kilidi etkinleştirildi. – Kewitschka

+0

@Kewitschka Üzgünüz Ama başka bir çözümüm yok, başka birinin sorunuzu yanıtlamasını bekleyebilirsiniz. En iyisi, eğer çözüm bulursanız, bu konuya mesaj yazabilirsiniz, Başkalarına yardımcı olabilir. –

+0

Doğru çözüm zaten kabul edildi. Her neyse – Kewitschka

1

ilk harfi yapmak istiyorsanız, sizin EditText içinde android:inputType="textCapSentences" kullanabilirsiniz , kapaklarla başlayın. Bazı farklı davranışlar da varsa, başka seçenekler de var.

İlgili konular