2011-09-30 14 views
14

मैं सॉफ्ट कीबोर्ड पर कुछ सामान करना चाहता हूं कुंजी दबाएं। नीचे मेरा कोड और आउटपुट देखें। यह दो बार निष्पादित करता है, लेकिन मैं इसे केवल एक बार निष्पादित करना चाहता हूं। इसे कैसे जोड़ेंगे?सॉफ्ट कीबोर्ड कुंजी ईवेंट हैंडल दर्ज करें

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    txt = (EditText)findViewById(R.id.txt); 
    txt.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_ENTER) { 
       Log.e("test","--------- on enter"); 
       return false; 
      } 
      return false; 
     } 
    }); 
} 

This is my output for this

उत्तर

19

सबसे अच्छा तरीका संभव:

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) { 
    Log.d(TAG, "enter_key_called"); 
} 
+2

शायद बजाय ACTION_UP के लिए जाना चाहिए, ताकि उपयोगकर्ता घटना मेरे अपने या उसकी उंगली को हटाने के रद्द कर सकते हैं? और उन लोगों के लिए KeyEvent.KEYCODE_DPAD_CENTER जोड़ें। – Kenneth

+0

https://developer.android.com/reference/android/view/View.OnKeyListener.html: 'जब किसी हार्डवेयर कुंजी को दृश्य में भेजा जाता है तो कॉल किया जाता है।'। यह सॉफ्ट कीबोर्ड के लिए काम नहीं करेगा। – mbonnin

+0

संपादन इनपुट टाइप करें = संपादन टेक्स्ट पर "टेक्स्ट", यह सॉफ्ट कीबोर्ड के लिए मेरे लिए काम करता है – SammyT

संबंधित मुद्दे