我正在尝试实现一个简单的Rich Text编辑器。该代码适用于字母和数字,但在我按空格/输入/删除之前输入的最后一个字符会在空格或输入后重复(附加)。
示例:如果我输入( hello world。),它会显示( helloo world。)。
有没有办法可以防止这个问题发生?
我的活动代码是:
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) {
}
});
我也尝试过onKey()但它对软键盘不起作用。
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; }
答案 0 :(得分:1)
假设您有一个像Shoe这样的字符串,所以声明
s.length() - 1
将返回3,请记住java中的数组索引将从0开始,所以
s.charAt(s.length() - 1)
将返回字符&#34; e&#34;再次。然后在你的if else子句中追加&#34; e&#34;到你的String,结果将是&#34; Shoee&#34;
编辑:根据你的评论,假设一个空字符串,所以你输入第一个字母&#34; s&#34;所以s会按预期附加到你的内容,你输入第二个字&#34; h&#34;以便附加到您的内容的角色将是&#34; h&#34;所以写信&#34; e&#34;,但是如果你在&#34;鞋&#34;之后放置空间你有&#34;鞋&#34;在你的内容中,你的if语句永远不会被运行,你的最后一句话会被重复,因为你用 == 检查你的字符串,这对于String或charSequence是不正确的。 你应该使用equal()代替:
如果((&#34; \ n&#34;)等于(c))的
答案 1 :(得分:0)
最终使用不同的方法解决了它。 我没有附加每个字符,而是使用跨度和字体进行更改,以使用 Html.toHtml()进行保存。 而不是生成Html文档以手动保存它,我使用预定义的 HTML 类自动生成它。