我正在寻找一个如何使用Image跨度构建和显示SpannableString的示例.像在线显示表情的东西.
非常感谢

我试图在ImageView周围对齐TextView.我使用以下代码:
private void createSpannableText(){
TextView myTextView = (TextView) findViewById(R.id.textView);
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(this.getText(R.string.loren__ipsum__max));
int lengthOfPart1 = builder.length();
builder.append(" ");
builder.append(this.getText(R.string.lorem__ipsum));
Drawable d = getResources().getDrawable(R.drawable.myImage);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear
ImageSpan myImage = new ImageSpan(d);
builder.setSpan(myImage, 0, lengthOfPart1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTextView.setText(builder);
}
Run Code Online (Sandbox Code Playgroud)
但无法得到确切的结果.我该怎么办?在这种情况下我需要使用SpannableStringBuilder还是有另一种方法.请帮忙.我使用这个帖子http://majaxandroidtips.blogspot.in/2009/06/how-to-have-few-layout-elements-wrap_17.html 来获得解决方案.
PS:我还希望ImageView周围有6dp的边距
我的xml布局中有一个ImageView和一个TextView.我想在下面显示我在ImageView右侧通过webservice获得的文本.我可以使用那个TextView显示该文本吗?

我试图在xml布局中给android:singleLine ="false"但没有用.
无论如何要在图像周围包装TextView吗?这是人们在CSS中做的典型事情,如http://www.echoecho.com/htmlimages08.htm
谢谢,
Tee

我正在使用列表视图来显示我想要像上面的图像一样显示的图像和文本,任何人都可以建议我如何用webview包装图像周围的文本.我使用以下代码:
Drawable dIcon = getResources().getDrawable(R.drawable.video_icon);
int leftMargin = dIcon.getIntrinsicWidth() + 10;
ImageView icon = (ImageView) findViewById(R.id.icon);
icon.setBackgroundDrawable(dIcon);
SpannableString ss = new SpannableString(text);
ss.setSpan(new MyLeadingMarginSpan2(3, leftMargin), 0, ss.length(), 0);
TextView messageView = (TextView) findViewById(R.id.message_view);
messageView.setText(ss);
Run Code Online (Sandbox Code Playgroud)
类
class MyLeadingMarginSpan2 implements LeadingMarginSpan2 {
private int margin;
private int lines;
MyLeadingMarginSpan2(int lines, int margin) {
this.margin = margin;
this.lines = lines;
}
@Override
public int getLeadingMargin(boolean first) {
if (first) {
return margin;
} else {
return 0;
}
}
@Override
public void drawLeadingMargin(Canvas …Run Code Online (Sandbox Code Playgroud) 我花了几个小时寻找答案,真的不知道如何解决它.让我们开始做生意:
有一个形象,一个TextView和我需要的流动TextView围绕ImageView这样的:
第一种可能的解决方案是使用https://github.com/deano2390/FlowTextView,但它没有扩展,TextView所以这个库不适合我,原因有很多.
第二个解决方案是使用LeadingMarginSpan.LeadingMarginSpan2span,但它会影响文本中每n行的每个段落(比如在这个答案 - > 如何布局文本以围绕图像流动),所以我得到像这样的smth:
但我想只为前n行设置保证金!然后我决定实现LeadingMarginSpan.Standart并创建一个计数器并在getLeadingMargin(first: Boolean): Int函数调用中增加它.当计数器达到理想值时,函数返回0作为边距宽度.再次失败了!TextView文本只是向左移动而不是传播到视图的末尾,而不是填充线条!
UPD:是的,我onGlobalLayoutListener在这里用过
好吧,谷歌搜索另一个解决方案,我发现这个答案/sf/answers/1894505791/ 好的,我已完成所描述的一切并实现了代码:
//set left margin of desirable width
val params: RelativeLayout.LayoutParams = RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
params.leftMargin = holder.imageContainerHeight!!
params.addRule(RelativeLayout.BELOW, holder.mNumberAndTimeInfo!!.id)
holder.mCommentTextView!!.layoutParams = params
if (holder.commentTextViewOnGlobalLayoutListener != null)
holder.mCommentTextView!!.viewTreeObserver.removeOnGlobalLayoutListener(
holder.commentTextViewOnGlobalLayoutListener)
//add onGlobalLayoutListener
holder.mCommentTextView!!.viewTreeObserver.addOnGlobalLayoutListener(
if (holder.commentTextViewOnGlobalLayoutListener != null)
holder.commentTextViewOnGlobalLayoutListener
else CommentTextViewOnGlobalLayoutListener(holder,
SpannableString(HtmlCompat.fromHtml(
mView.getActivity(), commentDocument.html(), 0,
null, SpanTagHandlerCompat(mView.getActivity())))))` …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序中有以下要求.

如何使用如上图所示的textview?
通过遵循这个问题,我能够在图像周围添加文字。但是,我有以下问题。

正如您所看到的,顶部图像的空间显示在右侧的每个段落中。在这个问题中,有人遇到了这个问题,并建议将“ss.length()”更改为“lines”。这似乎有效,除非第一段太短,下一段会与图像重叠。
我稍微修改了 FlowTextHelper 类以使用 Html 中的文本。这是我正在使用的代码:
public class FlowTextHelper {
private static boolean mNewClassAvailable;
/* class initialization fails when this throws an exception */
static {
try {
Class.forName("android.text.style.LeadingMarginSpan$LeadingMarginSpan2");
mNewClassAvailable = true;
} catch (Exception ex) {
mNewClassAvailable = false;
}
}
public static void tryFlowText(String text, View thumbnailView, TextView messageView, Display display, int addPadding){
// There is nothing I can do for older versions, so just return
if(!mNewClassAvailable) return;
// Get height and width of the …Run Code Online (Sandbox Code Playgroud)