Android在带有SpannableStringBuilder的文本之间附加图像

时间:2015-08-03 03:28:01

标签: android-edittext spannablestring

索里为我的英语。我希望附加图库中的图像,并使用SpannableStringBuilder在编辑文本中显示。我成功从Gallery获取Image Path。选择图片后,图片显示。但是,对于第二个附加图像图片没有显示和第一个图像附加成为文本。谁给我解决方案?十分感谢。 这是我的代码:

private void IntentPict() {
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select File"),MY_INTENT_CLICK);        
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK){
        if (requestCode == MY_INTENT_CLICK){
            if (null == data) return;

            String selectedImagePath;
            Uri selectedImageUri = data.getData();

            //there is no problem with get path
            selectedImagePath = ImageFilePath.getPath(getApplicationContext(), selectedImageUri);  

            //pathImag is ListArray<String>
            pathImg.add(selectedImagePath);

            addImageBetweentext(pathImg);
        }
    }
}

private void addImageBetweentext(ArrayList<String> listPath) {
    SpannableStringBuilder ssb = new SpannableStringBuilder();
    for(int i=0;i<listPath.size();i++){
        String path = listPath.get(i);
        Drawable drawable = Drawable.createFromPath(path);
        drawable.setBounds(0, 0, 400, 400);

        ssb.append(mBodyText+"\n");         
        ssb.setSpan(new ImageSpan(drawable), ssb.length()-(path.length()+1), 
            ssb.length()-1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    }
    mBodyText.setText(ssb);
}

1 个答案:

答案 0 :(得分:1)

这里应该有用。我正在加载资源drawables,只是因为我更快地验证,但我试图保持尽可能多的原始流和变量名称:

Drawable[] drawables = new Drawable[2];
drawables[0] = getResources().getDrawable(R.drawable.img1);
drawables[1] = getResources().getDrawable(R.drawable.img2);

SpannableStringBuilder ssb = new SpannableStringBuilder();
for (int i = 0; i < drawables.length; i++) {
    Drawable drawable = drawables[i];
    drawable.setBounds(0, 0, 400, 400);

    String newStr = drawable.toString() + "\n";
    ssb.append(newStr);
    ssb.setSpan(
            new ImageSpan(drawable),
            ssb.length() - newStr.length(),
            ssb.length() - "\n".length(),
            Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
mBodyText.setText(ssb);

长话短说:增量构建器的起始位置需要设置为当前长度,减去刚添加的内容。