2015-10-08 102 views
1

我想使editText,我插入一些文本。每三個字符後,我想插入破折號。Android的edittext附加和刪除附加

例子:

類型:123

結果:123-

現在,當光標後面儀表板和按刪除,我想刪除儀表板和字符後面衝刺。 例如:

123-

結果後刪除鍵:12 如何做到這一點。謝謝你的建議。

編輯

我的代碼是:

EditText editText; 
boolean keyDel = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText = (EditText) findViewById(R.id.editText); 
    editText.setOnKeyListener(new View.OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_DEL) { 
       keyDel = true; 
      } 
      return keyDel; 
     } 
    }); 

    editText.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 str = s.toString(); 
      System.out.println(str.length()); 
      if (str.length() == 3) { 
       str = str + "-"; 
      } else if (str.length() == 7) { 
       str = str + "-"; 
      } else if (str.length() % 4 == 0 && keyDel == true) { 
       str = str.substring(0, str.length() - 2); 
      } else { 
       return; 
      } 
      editText.setText(str); 
      editText.setSelection(editText.getText().length()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 

} 

我發現的是Android 4.4.2和海格doesn't支持的KeyEvent。

+0

發佈您的代碼:) – FWeigl

回答

1

我被this answer靈感,實現你想要的:

String mTextValue; 
    Character mLastChar = '\0'; // init with empty character 
    int mKeyDel; 


    myEditText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      boolean flag = true; 
      String eachBlock[] = myEditText.getText().toString().split("-"); 
      for (int i = 0; i < eachBlock.length; i++) { 
       if (eachBlock[i].length() > 4) { 
        flag = false; 
       } 
      } 
      if (flag) { 

       myEditText.setOnKeyListener(new View.OnKeyListener() { 

       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) { 

         if (keyCode == KeyEvent.KEYCODE_DEL) 
          mKeyDel = 1; 
          return false; 
         } 
       }); 

       if (mKeyDel == 0) { 

        if (((myEditText.getText().length() + 1) % 4) == 0) { 
         myEditText.setText(myEditTex.getText() + "-"); 
         myEditText.setSelection(myEditText.getText().length()); 
        } 
        mTextValue = myEditText.getText().toString(); 
       } else { 
        mTextValue = myEditText.getText().toString(); 
        if (mLastChar.equals('-')) { 
         mTextValue = mTextValue.substring(0, mTextValue.length() - 1); 
         myEditText.setText(mTextValue); 
         myEditText.setSelection(mTextValue.length()); 
        } 
        mKeyDel = 0; 
       } 

      } else { 
       myEditText.setText(mTextValue); 
      } 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      if (s.length()>0) {// save the last char value 
       mLastChar = s.charAt(s.length() - 1); 
      } else { 
       mLastChar = '\0'; 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) {} 

    }); 
0

我自己對android編程頗爲陌生。儘管如此,我認爲每次調用「setText」時都會觸發一個新的onTextChanged事件。 在我的應用程序中,我刪除偵聽器,設置文本,然後再次添加偵聽器以避免此問題。但爲此,您必須保存對TextWatcher的引用。

I.e.給你的活動延伸TextWatcher:

edittext.removeTextChangedListener(this); 
editText.setText(str); 
edittext.addTextChangedListener(this); 

您也可以使用把光標在最後:

myedittext.append(""); 
+0

確定。爲什麼要投票? – Yuta73

0

onTextChanged被稱爲每次添加和刪除的東西。因此,如果您的字符串長度爲3,則添加 - 並且新長度爲4.如果按delete(新的長度爲3),則調用onTextChanged,並再次添加 - 。所以如果沒有任何東西從文本中刪除,所以只添加一些東西

if (count > before) { 
     if (count == 3 || count == 7) { 
      str = str + "-"; 
     } else { 
      return; 
     } 
     input.setText(str); 
     input.setSelection(input.getText().length()); 
}