Tôi đang thực hiện một ứng dụng trò chuyện đơn giản và tôi muốn hiển thị mặt cười trên edittext khi viết tin nhắn.ImageSpan trên EditText (mặt cười). Với Bàn phím SwiftKey không hoạt động
Tôi đã này để xác định nhân vật mà sẽ được subsituted bởi một hình ảnh Xuyên một ImageSpan (điều này được gọi là chỉ khi một nhân vật biểu tượng mặt cười được chèn vào EditText):
for (index = start; index < start+num_chars; index++) {
if (index + 1 > editable.length())
continue;
if(emoticons.containsKey(editable.subSequence(index, index + 1).toString())){
int length=1;
Drawable drawable = context.getResources().getDrawable(emoticons.get(editable.subSequence(index, index + 1).toString()));
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
int size=Utils.GetDipsFromPixel(context, (int)(textSize*1.3));
Drawable d = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap, size, size, true));
int dWidth = d.getIntrinsicWidth();
int dHeight = d.getIntrinsicHeight();
d.setBounds(0 , -dHeight, dWidth, 0);
ImageSpan span;
span = new ImageSpan(d,ImageSpan.ALIGN_BASELINE);
editable.setSpan(span, index, index + length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index += length - 1;
}
}
Tôi đang sử dụng thẻ SPAN_EXCLUSIVE_EXCLUSIVE để thiết lập span, nhưng tôi có vấn đề với bàn phím swiftkey bởi vì khi tôi chèn một smiley trong edittext, tất cả mọi thứ tôi viết ngay sau khi imageSpan nó giữ bên dưới hình ảnh (như SPAN_EXCLUSIVE_INCLUSIVE). Với bàn phím mặc định của Android, tôi đã gặp vấn đề này.
Tôi chỉ muốn ứng dụng whatsapp cùng một biểu tượng mặt cười màu trắng trên EditText.
Mọi đề xuất? Bất kỳ thay đổi nào tôi phải thực hiện với mã của mình?
EDIT: biến "có thể chỉnh sửa" được chuyển cho phương thức. Nó là giá trị txtMessage.getText() trong đó txtMessage là EditText.
Cảm ơn!
CHỈNH SỬA: Chỉ sử dụng một phần mã! Điều này làm việc tốt trong multiline! Tôi nghĩ rằng vấn đề là sử dụng Drawable-> Bitmap-> ResizedBitmap-> Drawable.
public static final HashMap<String, Integer> emoticons = new HashMap();
static {
emoticons.put("\ue415", R.drawable.e415);
emoticons.put("\ue056", R.drawable.e056);
emoticons.put("\ue057", R.drawable.e057);
...
public static Spannable getSmiledText(Context context, Spannable editable,
int start, int num_chars, float textSize) {
int index;
for (index = start; index < start + num_chars; index++) {
if (index + 1 > editable.length())
continue;
if (EmojiLayout.emoticons.containsKey(editable.subSequence(index,
index + 1).toString())) {
int length = 1;
Bitmap smiley = BitmapFactory.decodeResource(context.getResources(), ((Integer) EmojiLayout.emoticons.get(editable.subSequence(index,
index + 1).toString())));
int size = Utils.GetDipsFromPixel(context,
(int) (textSize * 1.37));
Bitmap scaledbmp=Bitmap.createScaledBitmap(
smiley, size, size, false);
ImageSpan span;
span = new ImageSpan(scaledbmp);
Log.d("EmojiLayout", "Index: " + String.valueOf(index) + "To: "
+ String.valueOf(index + length));
editable.setSpan(span, index, index + length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index += length - 1;
}
}
return editable;
}
gửi lỗi này cho nhà phát triển và xem họ nói gì .. – Ronnie