TextView在屏幕上的形状为大方块。内部文本必须调整大小,使其尽可能大,并适合整个TextView空间。
假设文字是“你好”,结果将是屏幕上的一个大“问候”。
我在这里问如何将字体调整到正确的像素数量,前提是正方形的大小已知。
我知道显示的字符串不能完美平方,但主要目标是文本在TextView区域内尽可能大。
答案 0 :(得分:0)
Override following method:
@Override
public void onWindowFocusChanged (boolean hasFocus) {
// the height will be set at this point
int height = myEverySoTallView.getMeasuredHeight();
int width = myEverySoTallView.getMeasuredWidth();
//as per width/height you can try modifying text size
myTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, width/SOME_CONSTANT);
}
答案 1 :(得分:0)
好吧,如果你想要正常绘制文本(如0度旋转),但要缩放以满足视图的边界,你可以使用这样的东西:
public class ScalingTextCustomTextView extends CustomTextView {
public ScalingTextCustomTextView(Context context) {
super(context);
}
public ScalingTextCustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int height = getMeasuredHeight();
refitText(this.getText().toString(), parentWidth);
this.setMeasuredDimension(parentWidth, height);
}
@Override
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after) {
refitText(text.toString(), this.getWidth());
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if(w != oldw)
refitText(this.getText().toString(), w);
}
private void refitText(String text, int textWidth) {
if(textWidth <= 0)
return;
int targetWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();
float hi = 200;
float lo = 2;
final float threshold = 0.5f;
Paint temp = new Paint();
temp.set(getPaint());
while((hi - lo) > threshold){
float size = (hi + lo) / 2;
temp.setTextSize(size);
if(temp.measureText(text) >= targetWidth)
hi = size;
else lo = size;
}
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, lo);
}
}`
如果你想让它旋转45度,你可以添加:
@Override
public void onDraw(Canvas canvas){
canvas.save();
canvas.rotate(45, canvas.getWidth() / 2, canvas.getHeight() / 2);
super.onDraw(canvas);
canvas.restore();
}
但是如果你想要稍微缩放以适应最长距离,你必须调整refitText来根据从左上角到右下角的距离来计算目标宽度。
但这应该指向正确的方向。
答案 2 :(得分:0)
我认为设置所需的textView大小(myTextViewSize)就足够了,然后设置文本内容(它确实位于我想要的视图尺寸内),
然后使用
Rect bounds = new Rect();
textView.getPaint().getTextBounds(textView.getText(), 0, textView.getText().length(), bounds);
int oldTextWidth=bounds.width();
float oldFontSize=textView.getTextSize();
float newFontSize=(myTextViewSize- textView.getPaddingLeft() - textView.getPaddingRight())*oldFontSize/oldTextWidth;