【问题标题】:Image doesn't display in SpannableString with Image图像不显示在带有图像的 SpannableString 中
【发布时间】:2016-11-23 04:54:54
【问题描述】:
import static android.text.TextUtils.join;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List; 

public class MainActivity extends AppCompatActivity {

TextView testText;
TextView testText2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    testText = (TextView) findViewById(R.id.text1);
    testText2 = (TextView) findViewById(R.id.text2);

    List<SpannableString> refinements = new ArrayList<>();
    refinements.add(getFilterWithIcon("100", R.drawable.ic_feature_bed_s));
    refinements.add(new SpannableString("Testing text"));

    //Text without icon
    testText.setText(join(" | ", refinements));
    //Text with icon 
    testText2.setText(getFilterWithIcon("100", R.drawable.ic_feature_bed_s));

}

private SpannableString getFilterWithIcon(String stringValue, int icon) {
    Drawable image = ContextCompat.getDrawable(getApplicationContext(), icon);
    image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
    String spString = "  " + stringValue;
    SpannableString spFilterWithIcon = new SpannableString(spString);
    spFilterWithIcon.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return spFilterWithIcon;
}}

与另一个 SpannableString 连接时,图像不会出现。它仅作为单个 SpannableString 工作。 但是我需要加入多个 SpannableStrings 有&没有图像。

感谢您的意见。

【问题讨论】:

  • join方法在哪里?
  • @chandil03 它来自android TextUtils。
  • 尝试使用连接方法

标签: android spannablestring


【解决方案1】:

创建一个 SpannableStringBuilder 以附加多个图像跨度和文本

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(edittext.getText());
builder.append(getFilterWithIcon("100", R.drawable.ic_feature_bed_s));

最后设置

editText.setText(builder);

请注意,尽管 SpannableStringBuilder 是一个不可变的类,但它无法更改。

【讨论】:

  • getFilterWithIcon 的 setSpan 索引为 0 -> 1,因此您的附加方法不起作用
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多