My code is :
EditText edt
edt.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0)
I currently use this solution:
public static void insertText(String text, EditText editText)
{
int start = Math.max(editText.getSelectionStart(), 0);
int end = Math.max(editText.getSelectionEnd(), 0);
editText.getText().replace(Math.min(start, end), Math.max(start, end), text, 0, text.length());
try
{
editText.setSelection(start + 1);
}
catch (final IndexOutOfBoundsException e)
{
}
}
Try the following code
int start =editText.getSelectionStart(); //this is to get the the cursor position
String s = "Some string";
editText.getText().insert(start, s); //this will get the text and insert the String s into the current position
Here is the code to delete selected text from EditText
int start = t1.getSelectionStart(); //getting cursor starting position
int end = t1.getSelectionEnd(); //getting cursor ending position
String selectedStr = t1.getText().toString().substring(start, end); //getting the selected Text
t1.setText(t1.getText().toString().replace(selectedStr, "")); //replacing the selected text with empty String and setting it to EditText
You need to implement OnClickListener
for your buttons. Inside there you need to update the text of the editor. For example for '5' button:
public void onClick(View v) {
String currentText = edt.getText();
edt.setText(currentText + "5");
}
To insert:
String dialled_nos = dialpad_text.getText().toString();
String number = view.getTag().toString(); // 1,2....9,0
int start = dialpad_text.getSelectionStart();
dialled_nos = new StringBuilder(dialled_nos).insert(start, number).toString();
dialpad_text.setText(dialled_nos);
dialpad_text.setSelection(start+1); // cursor will move to new position
To remove:
String dialled_nos = dialpad_text.getText().toString();
int remove_index_position = dialpad_text.getSelectionStart()-1;
StringBuilder dialled_nos_builder = new StringBuilder(dialled_nos);
if(remove_index_position>=0) {
dialled_nos_builder.deleteCharAt(remove_index_position);
dialpad_text.setText(dialled_nos_builder.toString());
dialpad_text.setSelection(remove_index_position);
}
etPnr.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) {
etPnr.removeTextChangedListener(this);
// TODO: If you want to do on the text, apply here
if (start + count > etPnr.length())
etPnr.setSelection(etPnr.length());
else
etPnr.setSelection(start + count);
etPnr.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
});
You can try it
editText.getText().insert(editText.getSelectionStart(), text);
text being your actual string that you are looking to insert.