
通过遵循此question,我可以在图像周围添加文本.但是,我有以下问题.
如您所见,在右侧的每个段落中都显示了顶部图像的空间.在该问题中有人遇到了这个问题,并建议将“ 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 @R_419_4148@VIEw, 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 image and height of the text line @R_419_4148@VIEw.measure(display.getWIDth(), display.getHeight()); int height = @R_419_4148@VIEw.getMeasuredHeight(); int wIDth = @R_419_4148@VIEw.getMeasureDWIDth() + addpadding; messageVIEw.measure(wIDth, height); //to allow getTotalpaddingtop int padding = messageVIEw.getTotalpaddingtop(); float textlineHeight = messageVIEw.getPaint().getTextSize(); // Set the span according to the number of lines and wIDth of the image int lines = (int)Math.round((height - padding) / textlineHeight); //SpannableString ss = new SpannableString(text); //For an HTML text you can use this line: if(!text.equals("")) { SpannableStringBuilder ss = (SpannableStringBuilder) HTML.fromHTML(text); ss.setSpan(new MyLeadingmarginSpan2(lines, wIDth), 0, ss.length(), 0); messageVIEw.setText(ss); messageVIEw.setMovementMethod(linkMovementMethod.getInstance()); // links // Align the text with the image by removing the rule that the text is to the right of the image relativeLayout.LayoutParams params = (relativeLayout.LayoutParams) messageVIEw.getLayoutParams(); int[] rules = params.getRules(); rules[relativeLayout.RIGHT_OF] = 0; } }}public class MyLeadingmarginSpan2 implements LeadingmarginSpan.LeadingmarginSpan2 { private int margin; private int lines; public MyLeadingmarginSpan2(int lines, int margin) { this.margin = margin; this.lines = lines; } @OverrIDe public int getLeadingmargin(boolean first) { return first ? margin : 0; } @OverrIDe public int getLeadingmarginlineCount() { return lines; } @OverrIDe public voID drawLeadingmargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {}}是什么导致空格在每个段落中重复出现,我如何摆脱它?任何帮助表示赞赏.
解决方法:
我已经花了数小时来解决这个问题,但是由于在这里找到了答案,因此得以解决:
text wrapping around image in android
基本上如下:
首先在您的textvIEw中添加边距并设置文本
final relativeLayout.LayoutParams params = relativeLayout.LayoutParams)messageVIEw.getLayoutParams();params.setmargins(marginWIDth, 0, 0, 0);messageVIEw.setText(HTML.fromHTML(text));然后添加一个OnGlobalLayoutListener,并在onGlobalLayout()调用中计算实际需要多少行边距.您将行拆分为2个独立的spannable,并将margin仅添加到第一个:
messageVIEw.getVIEwTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { @Suppresslint("NewAPI") @SuppressWarnings("deprecation") @OverrIDe public voID onGlobalLayout() { int linesCount = messageVIEw.getLayout().getlineCount(); // restore the margin params.setmargins(0, 0, 0, 0); SpannableString spanS = new SpannableString ( HTML.fromHTML(text) ); if (linesCount <= lines) { spanS.setSpan(new MyLeadingmarginSpan2(lines, wIDth), 0, spanS.length(), 0); messageVIEw.setText(spanS); } else { // find the breakpoint where to break the String. int breakpoint = messageVIEw.getLayout().getlineEnd(lines-1); Spannable s1 = new SpannableStringBuilder(spanS, 0, breakpoint); s1.setSpan(new MyLeadingmarginSpan2(lines, wIDth), 0, s1.length(), 0); Spannable s2 = new SpannableStringBuilder(System.getProperty("line.separator")); Spannable s3 = new SpannableStringBuilder(spanS, breakpoint, spanS.length()); // It is needed to set a zero-margin span on for the text under the image to prevent the space on the right! s3.setSpan(new MyLeadingmarginSpan2(0, 0), 0, s3.length(), 0); messageVIEw.setText(TextUtils.concat(s1, s2, s3)); } // remove the GlobalLayoutListener if (androID.os.Build.VERSION.SDK_INT >= androID.os.Build.VERSION_CODES.JELLY_BEAN) { messageVIEw.getVIEwTreeObserver().removeOnGlobalLayoutListener(this); } else { messageVIEw.getVIEwTreeObserver().removeGlobalOnLayoutListener(this); } } }); 总结 以上是内存溢出为你收集整理的Android文字周围的图像错误全部内容,希望文章能够帮你解决Android文字周围的图像错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)