I am trying to implement a simple Rich Text editor. The code works fine for alphabets and numbers but the last character typed before I press space/enter/delete is repeated (appended) before the space or enter is appended.
example :if i type (hello world.) it displays (helloo world.).
Is there a way i can prevent this problem from occurring?
My Activity code is :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
textMessage = (EditText) findViewById(R.id.editText1);
textMessage.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
char c = s.charAt(s.length() - 1);
Log.d("Value of c::", "" + c);
if (c == '\n') {
content.append("<br>");
tv.setText(Html.fromHtml(content.toString()));
} else {
content.append(c);
tv.setText(Html.fromHtml(content.toString()));
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
i had also tried onKey() but it does not work for the soft keyboard.
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("pressed" + keyCode);
if (keyCode == KeyEvent.KEYCODE_DEL){
content.deleteCharAt(content.length()); }
else if (keyCode == KeyEvent.KEYCODE_ENTER){
content.append("</br>");
System.out.println("enter pressed"); }
else { char c = (char) keyCode;
Log.d("Keycode cast to char:::::", "" + c);
content.append(); }
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
// TODO Auto-generated method stub
System.out.println("pressed" + keyCode);
if (keyCode == KeyEvent.KEYCODE_DEL){
content.deleteCharAt(content.length()); }
else if (keyCode == KeyEvent.KEYCODE_ENTER){
content.append("</br>");
System.out.println("enter pressed"); }
else
{ char c = (char) keyCode;
Log.d("Keycode cast to char:::::", "" + c);
content.append(); }
return false; }