0

デルボタン機能を実装するのと同じように

EditText.getSelectionStart() で EditText の SpannableString を削除する方法

private void enterExpression(String imageFile) {
    try {
        Field field = R.drawable.class.getDeclaredField(imageFile);
        int resourceId = Integer.parseInt(field.get(null).toString());
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
                resourceId);
        ImageSpan imageSpan = new ImageSpan(bitmap);

        SpannableString spannableString = new SpannableString("[/"
                + imageFile + "]");
        spannableString.setSpan(imageSpan, 0, spannableString.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        sendContentEdt.append(spannableString);
    } catch (Exception e) {
        LogUtils.e(TAG, "enterExpressionException:" + e.getMessage());
    }
}
4

1 に答える 1

0

次の 2 つの方法があります。

  1. 簡単な方法は、あなたが言ったようにdelボタン機能を呼び出すことです。

次のようにコードを使用できます。

final KeyEvent keyEventDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL);
mEdit.onKeyDown(KeyEvent.KEYCODE_DEL, keyEventDown);
  1. また、を処理してSpannableString、editText に再割り当てすることもできます。imagespane=EditText.getSelectionStart();文字列は "[]" で引用されているため、"[" と "]" の間のすべての文字をそれらを含めて削除します。

いくつかのサンプルコードがあります:

StringBuffer localStringBuffer = new StringBuffer(mEdit.getText().toString());
int i,j;
String result;
if (localStringBuffer.length() > 0) {
    i = cursor;
    if (i != 0) {
        char ch = localStringBuffer.charAt(i - 1);
        if (localStringBuffer.charAt(i - 1) != ']') {
            result = localStringBuffer.toString().substring(0, i - 1) + localStringBuffer.toString().substring(i);
            j = i-1;
        }else{
            j =localStringBuffer.substring(0, i - 1).lastIndexOf("[");
            if(j==-1) j =i;
            result = localStringBuffer.toString().substring(0, j) + localStringBuffer.toString().substring(i);
        }
        mEdit.setText(addSmileySpansFromCode(result));
        mEdit.setSelection(j);
    }
}
于 2012-09-28T09:30:01.053 に答える