安卓:如何限制最多两行在静态布局的图像



我有一个图像,我必须在上面写顶部和底部的文本,我使用静态布局在上面写。下面是它的代码

TextPaint mTextPaintTop= new TextPaint();
mTextPaintTop.setColor(Color.RED);
StaticLayout layoutTop = new StaticLayout(top_text, mTextPaintTop,             
width,Layout.Alignment.ALIGN_CENTER, 1.3f, 0, false);
canvas.translate(0, 20); //position the text
layoutTop.draw(canvas);

我想把文本限制在两行以内。如果用户键入长文本,并且超过2行,则减小字体大小,使其只能调整为2行。

下载此文件ElliptizingTextView

@Override
    public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    Paint mpaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mpaint.setColor(Color.RED);
    mpaint.setTextSize(13);
    mpaint.setTextAlign(Align.CENTER);
        drawTextOnCanvas(canvas, "text you want 2 line bigger", 0, 20, mpaint);
    }
}
private void drawTextOnCanvas(Canvas canvas, String text, int x, int y, Paint mPaint) {
        // Setup a textview like you normally would with your activity context
        EllipsizingTextView tv = new EllipsizingTextView(mContext);
        tv.setGravity(Gravity.CENTER_HORIZONTAL);
        tv.setEllipsize(TruncateAt.END);
        tv.setMaxLines(2);
        // setup text
        tv.setText(text);
        // maybe set textcolor
        tv.setTextColor(Color.WHITE);
        // you have to enable setDrawingCacheEnabled, or the getDrawingCache will return null
        tv.setDrawingCacheEnabled(true);
        // we need to setup how big the view should be..which is exactly as big as the canvas
        tv.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.EXACTLY));
        // assign the layout values to the textview
        tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
        // draw the bitmap from the drawingcache to the canvas
        canvas.drawBitmap(tv.getDrawingCache(), x, y, mPaint);
        // disable drawing cache
        tv.setDrawingCacheEnabled(false);
    }

最新更新