2012-09-28 9 views
5

मेरे पास एक त्वरित प्रश्न है।edittext के अंतिम अक्षर को हटाएं

मेरे पास कुछ संख्याओं के साथ एक स्क्रीन है, जब आप संख्याओं में से किसी एक पर क्लिक करते हैं, तो संख्या edittext के अंत में संलग्न हो जाती है।

input.append(number); 

मेरे पास बैकबटन भी है, जब उपयोगकर्ता इस बटन पर क्लिक करता है तो मैं अंतिम चरित्र को हटाना चाहता हूं।

फिलहाल मैं निम्नलिखित है:

Editable currentText = input.getText(); 

if (currentText.length() > 0) { 
    currentText.delete(currentText.length() - 1, 
      currentText.length()); 
    input.setText(currentText); 
} 

वहाँ यह करने के लिए एक आसान तरीका है? Input.remove() की रेखा में कुछ?

+1

मैं – njzk2

उत्तर

10

मुझे पता है यह एक पुराने सवाल यह है लेकिन यह अभी भी मान्य है। यदि आप स्वयं टेक्स्ट को ट्रिम करते हैं, तो कर्सर को सेट पर रीसेट कर दिया जाएगा जब आपText() सेट करते हैं। तो बजाय (के रूप में njzk2 ने उल्लेख किया), एक नकली महत्वपूर्ण घटना हटा सकते हैं और मंच आप के लिए इसे संभाल जाने भेजें ...

//get a reference to both your backButton and editText field 

EditText editText = (EditText) layout.findViewById(R.id.text); 
ImageButton backButton = (ImageButton) layout.findViewById(R.id.back_button); 

//then get a BaseInputConnection associated with the editText field 

BaseInputConnection textFieldInputConnection = new BaseInputConnection(editText, true); 

//then in the onClick listener for the backButton, send the fake delete key 

backButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     textFieldInputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); 
    } 
}); 
+2

अच्छा दृष्टिकोण, और यह काम कर रहा है! एक बात जो ध्यान दी जानी चाहिए, कोड * केवल "हटाएं" कुंजी दबाकर अनुकरण करता है। काम करने के लिए हटाने के लिए, 'EditText' पर ध्यान केंद्रित होना चाहिए। आप 'editText.isFocused()' का उपयोग करके जांच सकते हैं, और इसे ध्यान में रखने के लिए 'editText.requestFocus()' का उपयोग करें। यह कर्सर को अंत में भी रखेगा, इसलिए यह अंतिम चरित्र को हटा देगा। –

8

इस आज़माते हैं, तो

String str = yourEditText.getText().toString().trim(); 


    if(str.length()!=0){ 
    str = str.substring(0, str.length() - 1); 

    yourEditText.setText (str); 
} 
+3

अंदर डेल कुंजी के साथ एक keyEvent डालेगी यह सरल नहीं है और नहीं है सीमाओं की जांच करें। – njzk2

+0

यह आपके कर्सर को संपादन टेक्स्ट की शुरुआत में सेट करता है, जो आदर्श नहीं है –