Android文字周围的图像错误

Android文字周围的图像错误,第1张

概述通过遵循此question,我可以在图像周围添加文本.但是,我有以下问题.如您所见,在右侧的每个段落中都显示了顶部图像的空间.在该问题中有人遇到了这个问题,并建议将“ss.length()”更改为“lines”.这似乎可行,除非第一段太短,下一段将与图像重叠.我稍微修改了FlowTextHelper类,以

通过遵循此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文字周围的图像错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1088180.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存