TextView正确测量宽度

时间:2015-06-07 11:02:56

标签: android android-layout android-custom-view

我正在尝试通过扩展RelativeLayout来创建自定义ViewGroup。

我在父布局上添加一些视图,通过dispatchDraw绘制一些位图。

不幸的是,TextView会在最后被剪切并继续屏幕外的其余部分,因此下一行未正确继续。

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,我在屏幕上绘制一些位图。

enter image description here

结果就是这样。正如您在屏幕的右侧部分所看到的那样,文本在行之间没有正确连续。

这是我第一次尝试做这样的事情,如果可能的话,我会很感激。

已搜索过网络上的所有内容,但我发现的任何内容都没有帮助我完成此任务。

提前谢谢。

0 个答案:

没有答案