Android TextView正确测量宽度

Android TextView正确测量宽度,android,android-layout,android-custom-view,Android,Android Layout,Android Custom View,我试图通过扩展RelativeLayout来创建自定义视图组 我也通过dispatchDraw在父布局上添加了一些视图来绘制一些位图 不幸的是,文本视图在末尾被剪切,并继续屏幕外的其余文本,因此下一行没有正确继续 likesTextView.setGravity(Gravity.LEFT); likesTextView.setSingleLine(false); likesTextView.setMovementMethod(LinkMovementMethod.getInsta

我试图通过扩展RelativeLayout来创建自定义视图组

我也通过
dispatchDraw
在父布局上添加了一些视图来绘制一些位图

不幸的是,文本视图在末尾被剪切,并继续屏幕外的其余文本,因此下一行没有正确继续

likesTextView.setGravity(Gravity.LEFT);
    likesTextView.setSingleLine(false);
    likesTextView.setMovementMethod(LinkMovementMethod.getInstance());

    RelativeLayout.LayoutParams likesParams = new RelativeLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT
    );
    likesTextView.setLayoutParams(likesParams);

    addView(likesTextView);
这些是我正在使用的布局参数

viewPager.layout(0,0,getWidth(),400);
    int finalWidth = 0;

    if((int) likesTextView.getPaint().measureText(finalLikesText) - r > 0){
        finalWidth = (int) likesTextView.getPaint().measureText(finalLikesText) - r + 100 + l;
    }else{
        finalWidth = getWidth();
    }

    Log.e(getClass().getSimpleName(),"Final Width:" + finalWidth);
    Log.e(getClass().getSimpleName(),"MeasuredWidth:" + likesTextView.getMeasuredWidth() +
            " MeasuredHeight:" + likesTextView.getMeasuredHeight());
    likesTextView.measure(
            MeasureSpec.makeMeasureSpec(likesTextView.getWidth(), MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(likesTextView.getHeight(), MeasureSpec.EXACTLY)
    );
    likesTextView.layout(
            100,
            viewPager.getHeight(),
            100 + likesTextView.getMeasuredWidth(),
            likesTextView.getMeasuredHeight() + 400
    );
这是
onLayout
方法,在这里我设置了它的宽度和高度

if (launcherBitmap != null) {
        canvas.drawBitmap(
                launcherBitmap,
                0,
                viewPager.getHeight(),
                photoPaint
        );
    }
    int x = 0, y = viewPager.getHeight() +
            likesTextView.getMeasuredHeight() + 80;
    for (String line: finalCommentsText.split("\n")) {
        canvas.drawText(line, x, y, commentsPaint);
        y += commentsPaint.descent() - commentsPaint.ascent();
    }
    if(launcherBitmap != null){
        int initialXUtilities = 0;
        canvas.drawBitmap(
                launcherBitmap,
                initialXUtilities,
                y + 10,
                photoPaint
        );

        canvas.drawBitmap(
                launcherBitmap,
                initialXUtilities + 100,
                y + 10,
                photoPaint
        );

        canvas.drawBitmap(
                launcherBitmap,
                initialXUtilities + 200,
                y + 10,
                photoPaint
        );
    }
    super.dispatchDraw(canvas);
这个方法是
dispatchDraw
,我在屏幕上绘制了一些位图

结果就是这样。正如您在屏幕右侧看到的,文本在行间没有正确地继续

这是我第一次尝试做这样的事情,如果可能的话,我会非常感谢你的帮助

我已经在网上搜索了所有的东西,但是我没有发现任何东西能帮助我完成这项任务


提前谢谢。

看起来您应该使用或类似的东西作为
文本视图的容器,它将自动包装它们。如果
FlowLayout
不能满足您的需要。如果两者都不是你想要的,你可以用它们来创作你自己的作品。我可以扩展它吗,或者我必须创建一个xml并包装我的元素吗?它是一个Java类,所以想必你可以成功地对它们进行子类化。@Commonware如果我只是将textView添加到flowLayout中,然后将flowLayout添加到我的RelativeLayout中,会有同样的效果,对吗?这就是我的想法。虽然我现在明白了:你的逗号分隔的链接列表是一个大的
TextView
?如果是,那么这不是
FlowLayout
场景。如果列表中的每个单词都是自己的
TextView
,则可以使用
FlowLayout
。如果链接列表是一个大的
TextView
,则您的宽度计算可能已关闭。使用层次视图或
uiautomatorviewer
查看
TextView
的宽度。我很抱歉没有直截了当地思考--我现在还很早…:-)