The text of the EditText is "(hint)" <-- this is important because of the lengths I use
This is the code. However, the only problem seems to be that when the user backspaces, it will not put the cursor in the correct place. You can probably fix that witht the setSelection(int)
lines. I'll make an update if I figure it out.
Note: all of the Toasts are just tests so you know what is happening with the code.
String pastText = ""; // represents the text BEFORE the text is changed each time
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText)findViewById(R.id.et);
// run this code every time the EditText String is changed
et.addTextChangedListener(new TextWatcher()
{
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// length of the String in the EdiText
int length = et.getText().toString().length();
// is the String of the EditText from first position to length - 6 position
// (take away the non-editable text)
String editableText = et.getText().toString().substring(0, length - 6);
int cursor = et.getSelectionStart(); // where the cursor currently is
// minSelection is the second position number of the non-editable
// text in the EditText. It's the second position because the
// cursor needs to be BEFORE it, and the comparison will be
// if the cursor is LESS than minSelection.
// so it's the length, subtract 5, because the non-editable text
// is 6 chars long. Ex: if the EditText was "test(hint)" then
// minSelection would be the position (as int) of 'h' in the String
int minSelection = length-5;
// if the user has his cursor BEFORE the non-editable text
if (cursor < minSelection)
Toast.makeText(getApplicationContext(), "good to type", 0).show();
else { // otherwise (he can't edit)
Toast.makeText(getApplicationContext(), "can't type", 0).show();
int currentCursor = et.getSelectionStart(); // get where the cursor is
et.setText(pastText); // set the text to what it used to be
et.setSelection(currentCursor-1); // set cursor where it previously was
}
Toast.makeText(getApplicationContext(), "past text: " + pastText, 0).show();
Toast.makeText(getApplicationContext(),
"text: " + editableText + '\n' + '\n'
+ "cursor: " + cursor + '\n' + '\n'
+ "minSelection: " + minSelection, 0).show();
}
@Override public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// in the method beforeTextChanged, set pastText to be the text
// of the EditText before the text is changed
pastText = et.getText().toString();
}
});
}