字符串资源中的可绘制对象

6

我希望展示一个包含字符串和图标的AlertDialog。

有没有可能在字符串资源中插入图标/图片/可绘制对象? 是否有方法可以在AlertDialog中与字符串一起显示可绘制对象?

编辑
如果不清楚,需要将可绘制对象放在字符串内,例如“点击图标[图标图像],然后再单击…”。


http://sriramramani.wordpress.com/2013/01/15/compound-drawables/ - Simon
我是指在字符串的中间... - nrofis
3个回答

12
    SpannableString spannableString = new SpannableString("@");
    Drawable d = getResources().getDrawable(R.drawable.your_drawable);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
    spannableString.setSpan(span, spannableString.toString().indexOf("@"),  spannableString.toString().indexOf("@")+1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    yourTextView.setText(spannableString);

@AkashBisariya 这在TextView中运行良好,但我想在文本输入布局错误中使用图像。当我尝试将此SpannableString分配给错误状态时,它不显示图像。相反,它显示“@”符号。如果您知道如何在TextinputLayout错误中使用相同的技术,请帮助我。 - Raj Suvariya
@RajSuvariya,你找到解决问题的方法了吗? - Akash Bisariya
@RajSuvariya 在文本输入布局中吗? - Akash Bisariya
你解决了文本输入布局问题吗? - Akash Bisariya
1
非常感谢!我需要对我的情况进行一些修改,现在它完美地运行了! - Jimmy ALejandro
显示剩余3条评论

6
AlertDialog.Builder类有一个方法setIcon(int iconRes)setIcon(Drawable icon),您可以使用这个方法来设置图标。

编辑:

如果您需要将其放置在字符串的中间,您可以使用ImageSpan

String src = "Here's an icon: @ isn't it nice?";
SpannableString str = new SpannableString(src);
int index = str.indexOf("@");
str.setSpan(new ImageSpan(getResources().getDrawable(R.drawable.my_icon), index, index + 1, ImageSpan.ALIGN_BASELINE));

AlertDialog.Builder x = new AlertDialog.Builder(myContext);
x.setMessage(str);

3
有没有办法在 string.xml 资源文件中完成这个任务? - nrofis
你可以将其抽象成一些自定义的TextView,检查字符串是否符合某种格式(例如{{R.drawable.my_icon}}),解析可绘制对象并自动将其转换为Span。但是,这样你还需要创建一个使用此自定义TextView的Dialog子类,这不是一项小工作。 - Kevin Coppock
谢谢,我以为这个微小的基本功能已经被Android SDK实现了。 - nrofis

0

您可以在包含复合绘图的ImageView或TextView中使用{{link1:自定义视图}}或{{link2:自定义标题}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接