Add*_*dev 6 java android emoticons
我正在尝试使用EditText实现一个活动,该活动用表情符号替换一些关键字(我的代码在最后).
除了一个细节之外,代码工作得很完美.如果我输入EditText".sa." 它被img1取代,但如果我要撤消它,我需要在图像消失之前单击4次删除(对于关键字中的每个字符一次).
这是我第一次使用Spannables并且不知道如何修复它.你能帮助我吗?
public class MytestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText et = (EditText) findViewById(R.id.editText1);
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
getSmiledText(MytestActivity.this, s);
Log.e("",s.toString());
}
});
}
private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
static {
emoticons.put(".sa.", R.drawable.img1);
emoticons.put(".sb.", R.drawable.img2);
}
public static Spannable getSmiledText(Context context, Editable builder) {
int index;
for (index = 0; index < builder.length(); index++) {
for (Entry<String, Integer> entry : emoticons.entrySet()) {
int length = entry.getKey().length();
if (index + length > builder.length())
continue;
if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index += length - 1;
break;
}
}
}
return builder;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以尝试这样的事情:
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
try {
if (count == 1 && after == 0 &&// tried to delete a char
s.length() >= ".sa.".length() && // string could contain an emoticon
s.subSequence(start - ".sa.".length() + 1, start + 1).toString().equals(".sa.")// the last string is .sa.
) {
et.setText(s.subSequence(0, s.length() - ".sa.".length()));
}
} catch (Exception e) {
}
}
Run Code Online (Sandbox Code Playgroud)
这会带来另外几个问题(您将会看到),而且它远不是一个黄金解决方案;我只是想让你知道如何去做。".sa."当然,你必须更换字符串的使用方式;为了简单起见,我对其进行了硬编码。
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |