Android 如何在自定义编辑文本中设置最小文本大小?

Android 如何在自定义编辑文本中设置最小文本大小?,android,Android,我正在使用此自定义EditText,它会自动调整EditText中文本的大小。它工作得很好,但是,文本在换行之前变得太小了。如何设置最小文本大小?因此,只有当文本大小达到12sp时,它才会更改行 public class FontFitTextView extends EditText { // Attributes private Paint mTestPaint; private float defaultTextSize; public FontFitTextView(Context

我正在使用此自定义EditText,它会自动调整EditText中文本的大小。它工作得很好,但是,文本在换行之前变得太小了。如何设置最小文本大小?因此,只有当文本大小达到12sp时,它才会更改行

public class FontFitTextView extends EditText {

// Attributes
private Paint mTestPaint;
private float defaultTextSize;

public FontFitTextView(Context context) {
    super(context);
    initialize();
}

public FontFitTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initialize();
}

private void initialize() {
    mTestPaint = new Paint();
    mTestPaint.set(this.getPaint());
    defaultTextSize = getTextSize();
}

/* Re size the font so the specified text fits in the text box
 * assuming the text box is the specified width.
 */
private void refitText(String text, int textWidth) {

    if (textWidth <= 0 || text.isEmpty())
        return;

    int targetWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();

    // this is most likely a non-relevant call
    if( targetWidth<=2 )
        return;

    // text already fits with the xml-defined font size?
    mTestPaint.set(this.getPaint());
    mTestPaint.setTextSize(defaultTextSize);
    if(mTestPaint.measureText(text) <= targetWidth) {
        this.setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultTextSize);
        return;
    }

    // adjust text size using binary search for efficiency
    float hi = defaultTextSize;
    float lo = 2;
    final float threshold = 0.5f; // How close we have to be
    while (hi - lo > threshold) {
        float size = (hi + lo) / 2;
        mTestPaint.setTextSize(size);
        if(mTestPaint.measureText(text) >= targetWidth )
            hi = size; // too big
        else
            lo = size; // too small

    }

    // Use lo so that we undershoot rather than overshoot
    this.setTextSize(TypedValue.COMPLEX_UNIT_PX, lo);
}

@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 || h != oldh) {
        refitText(this.getText().toString(), w);
    }
}
公共类FontFitTextView扩展了EditText{
//属性
私人涂料;
私有浮动大小;
公共FontFitTextView(上下文){
超级(上下文);
初始化();
}
公共FontFitTextView(上下文、属性集属性){
超级(上下文,attrs);
初始化();
}
私有void初始化(){
mTestPaint=新油漆();
mTestPaint.set(this.getPaint());
defaultTextSize=getTextSize();
}
/*重新调整字体大小,使指定的文本适合文本框
*假设文本框为指定的宽度。
*/
私有文本(字符串文本,int textWidth){

如果(textWidth您只需要更改
lo

// adjust text size using binary search for efficiency
float hi = defaultTextSize;
float lo = 2;
例如:

// adjust text size using binary search for efficiency
float minTextSize = defaultTextSize / 2;
float hi = defaultTextSize;
float lo = minTextSize;

您只需更改
lo

// adjust text size using binary search for efficiency
float hi = defaultTextSize;
float lo = 2;
例如:

// adjust text size using binary search for efficiency
float minTextSize = defaultTextSize / 2;
float hi = defaultTextSize;
float lo = minTextSize;

可以添加测试xml吗pls@KevinWallis完成后,请检查更新是否可以添加测试xmlpls@KevinWallis完成,请检查更新我如何设置最小字体大小12?您的代码可以工作,但在更改之前它变得太小line@Cassie我会根据
defaultTextSize
设置
minTextSize
。因此,当is 120你可以用1/10谢谢凯文。顺便问一下,你能回答这个问题吗?我好像被困了4天,没有运气:(如何设置最小字体大小12?您的代码可以正常工作,但在更改之前变得太小了。)line@Cassie我会根据
defaultTextSize
设置
minTextSize
。所以当默认值为120时,你可以使用它的1/10谢谢你,凯文。顺便问一下,你能回答这个问题吗?我好像被困了4天,运气不好:(