2015-10-15 30 views
-1

如何強制在EditText中顯示不能刪除但單擊Backspace的字母。 ex。 [#____________] 在上例中,#是該edittext字段的默認值。當使用Edittext.gettext()時,它應該返回'#32343'如何在Android的EditText中設置未更改的第一個字母

+0

我會盡快發佈一個片段,但在此期間檢查一下:https://developer.android.com/reference/android/text/TextWatcher.html# beforeTextChanged(java.lang.CharSequence,int,int,int)。 – Leonardo

回答

0

您可以實現一個TextChangedListener,您可以確保文本的這些部分不會被刪除/覆蓋。

試試這個代碼

final EditText edt = (EditText) findViewById(R.id.editText1); 

edt.setText("#"); 
Selection.setSelection(edt.getText(), edt.getText().length()); 


edt.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      if(!s.toString().contains("#")){ 
       edt.setText("#"); 
       Selection.setSelection(edt.getText(), edt.getText().length()); 

      } 

     } 
    }); 
1

幾種方法立刻浮現在腦海,但我承認您的問題混淆。看起來你想(而不是顯示一個空的EditText)在開頭顯示帶有字母的EditText。如果是這樣的話,試試這個:

final EditText et = (EditText) findViewById(R.id.my_edit_text); 

// default characters to display 
// replace "#" with whatever you like 
final String defaultTextDisplayed = "#"; 

// text is either set here or via xml, preferably via strings.xml 
et.setText(defaultTextDisplayed); 

et.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // ignored 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // ignored 
    } 

    // This is the callback we're interested in. Any time 
    // your user edits what is in the EditText, this method 
    // is called. We'll use it listen for when a user tries 
    // to delete the default display text. 
    @Override 
    public void afterTextChanged(Editable s) { 
     // if the user attempts to delete and of the default 
     // string displayed, just put it back 
     if (s.length() < defaultTextDisplayed.length()) { 
      et.setText(defaultTextDisplayed); 
     } 
    } 
}); 
+1

只是要清楚,這不會顯示#直到用戶開始輸入內容! – Leonardo

+0

感謝@LeonardoFerrari指出。我(可能錯誤地認爲)文本將最初通過XML設置。事實上,defaultTextDisplayed必須在此代碼中其他位置的EditText上設置。你認爲我應該編輯我的代碼來澄清? – lustig

+0

不客氣。也許你應該在'et.addTextChangedListener'之前設置EditText中的'#',你怎麼看? – Leonardo

相關問題