Android: как ограничить до двух строк в статическом макете на изображении - PullRequest
3 голосов
/ 27 марта 2012

У меня есть одно изображение, и на этом я должен написать верхний и нижний текст, я использую статический макет, чтобы написать на нем. Ниже приведен код этого

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 строк.

1 Ответ

1 голос
/ 27 марта 2012

Загрузить этот файл EllipsizingTextView

@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);
    }
...