FitSizeTextView.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package epson.print.Util;
  2. import android.content.Context;
  3. import android.graphics.Rect;
  4. import android.text.TextPaint;
  5. import android.util.AttributeSet;
  6. public class FitSizeTextView extends androidx.appcompat.widget.AppCompatTextView {
  7. public FitSizeTextView(Context context) {
  8. super(context);
  9. }
  10. public FitSizeTextView(Context context, AttributeSet attributeSet) {
  11. super(context, attributeSet);
  12. }
  13. private void refitText(String str, int i) {
  14. if (i > 0) {
  15. float paddingLeft = (float) ((i - getPaddingLeft()) - getPaddingRight());
  16. TextPaint paint = getPaint();
  17. paint.getTextBounds(str, 0, str.length(), new Rect());
  18. float textSize = paint.getTextSize();
  19. float measureText = paint.measureText(str);
  20. while (measureText >= paddingLeft) {
  21. textSize -= 1.0f;
  22. paint.setTextSize(textSize);
  23. measureText = paint.measureText(str);
  24. }
  25. setSingleLine();
  26. }
  27. }
  28. protected void onMeasure(int i, int i2) {
  29. super.onMeasure(i, i2);
  30. int size = MeasureSpec.getSize(i);
  31. int size2 = MeasureSpec.getSize(i2);
  32. refitText(getText().toString(), size);
  33. setMeasuredDimension(size, size2);
  34. }
  35. protected void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
  36. refitText(getText().toString(), getWidth());
  37. }
  38. protected void onSizeChanged(int i, int i2, int i3, int i4) {
  39. if (i != i3) {
  40. refitText(getText().toString(), i);
  41. }
  42. }
  43. }