实现在EditText中输入自定义表情,需要将放在drawable中的表情图片,嵌入到EditText中,这里利用ImageSpan实现该功能。
第一步:利用反射机制,得到图片资源的ID,生成图片bitmap对象
Field field = R.drawable.class.getDeclaredField("image" + random);
int resouceId = Integer.parseInt(field.get(null).toString());
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resouceId);
第二步:创建imageSpan对象,将imageSpan对象加载到spannableString中
ImageSpan span = new ImageSpan(getApplicationContext(), bitmap);
SpannableString spanna = new SpannableString("image");
spanna.setSpan(span, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
第三步:将SpannableString对象加到EditText中
edittext.append(spanna);
如何在EditText中限定输入字符的方式:
1.通过设置digits属性限定输入的字符:android:digits="0123456789"
2.通过设置inputtype属性选择输入字符类型:android:inputType="number"
3.通过设置numberic属性接受数字输入:android:numeric="integer"
android:inputType来设置文本的类型,让输入法选择合适的软键盘的.
android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed
(带符号整数)和decimal(浮点数).
android:digits 属性 输入规则 例如:android:digits=“0123456789” 表示只能输入数字。 android:digits=“0123456789.” 表示可以输入数字和小数点
监听是否输入过小数点:
et_content.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) {
if
(et_content.getText().toString().indexOf(
"."
) >=
0
) {
if
(et_content.getText().toString().indexOf(
"."
, et_content.getText().toString().indexOf(
"."
) +
1
) >
0
) {
tv_numOfChar.setText(
"已经输入\".\"不能重复输入"
);
et_content.setText(et_content.getText().toString().substring(
0
, et_content.getText().toString().length() -
1
));
et_content.setSelection(et_content.getText().toString().length());
}
}
}
@Override
public
void
afterTextChanged(Editable s) {
}
});