Android字体大小在平板上不进行缩放。

18 浏览
0 Comments

Android字体大小在平板上不进行缩放。

我正在尝试创建一个方法,用于调整TextView中的多行文本大小,使其适应TextView的边界(包括X和Y维度)。

目前,我有一些代码,但它只是调整文本的大小,使得文本的第一个字母/字符填满TextView的维度(即只有第一个字母可见,而且很大)。我需要将文本的所有行都适应TextView的边界。

以下是我目前的代码:

public static void autoScaleTextViewTextToHeight(TextView tv)
{
    final float initSize = tv.getTextSize();
    //获取视图背景图的宽度(未缩放).... 
    float minViewHeight;
    if(tv.getBackground()!=null)
    {
      minViewHeight = tv.getBackground().getIntrinsicHeight();
    }
    else
    {
      minViewHeight = 10f;//一些最小值。
    }
    final float maxViewHeight = tv.getHeight() - (tv.getPaddingBottom()+tv.getPaddingTop())-12;// 减12只是为了确保
    final String s = tv.getText().toString();
    //System.out.println(""+tv.getPaddingTop()+"/"+tv.getPaddingBottom());
    if(minViewHeight >0 && maxViewHeight >2)
    {
      Rect currentBounds = new Rect();
      tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);
      //System.out.println(""+initSize);
      //System.out.println(""+maxViewHeight);
      //System.out.println(""+(currentBounds.height()));
      float resultingSize = 1;
      while(currentBounds.height() < maxViewHeight)
      {
        resultingSize ++;
        tv.setTextSize(resultingSize);
        tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);
        //System.out.println(""+(currentBounds.height()+tv.getPaddingBottom()+tv.getPaddingTop()));
        //System.out.println("Resulting: "+resultingSize);
      }
      if(currentBounds.height()>=maxViewHeight)
      {
        //为了确保,减小值
        tv.setTextSize(resultingSize-1);
      }
    }
}

我认为问题在于使用tv.getPaint().getTextBounds(...)。它总是返回文本边界的较小数字... 相对于tv.getWidth()tv.getHeight()的值而言很小... 即使文本大小远大于TextView的宽度或高度。

0
0 Comments

问题:在平板上,Android字体大小不随着屏幕缩放而自动调整。

原因:这个问题在Android O之前是存在的,因为在较大的屏幕上,字体大小没有按比例缩放。为了解决这个问题,Android O引入了自动调整字体大小的功能。

解决方法:使用Android O及以上版本,可以通过在TextView中添加以下属性来实现字体大小的自动调整:


如果使用支持库,可以使用以下属性来实现字体大小的自动调整:


以上就是解决Android平板上字体大小不随屏幕缩放而调整的方法。通过设置自动调整字体大小的属性,可以确保在不同尺寸的屏幕上,字体大小能够自动适应,提供更好的用户体验。

0
0 Comments

问题的出现原因是在Android平板上字体大小不会自动缩放。解决方法是使用AutofitTextView库。首先,在app/build.gradle文件中添加以下内容:repositories { mavenCentral() } dependencies { implementation 'me.grantland:autofittextview:0.2.+' },然后在代码中或者XML中启用任何继承自TextView的View,例如:AutofitHelper.create(textView);或者在XML中使用me.grantland.widget.AutofitLayoutme.grantland.widget.AutofitTextView。这个库的功能类似于iOS的adjustsFontSizeToFitWidth,但不支持StyleSpans,可能会导致文字截断。这个解决方案非常完美,感谢提供答案的人。

0
0 Comments

问题出现的原因:

这个问题出现的原因是在不同的7英寸平板电脑上,字体大小没有正确缩放。作者尝试了很长时间,但是无法在各种不同的设备上得到正确的字体大小。

解决方法:

最后作者找到了一个可行的解决方法。下面是解决方法的代码。其中的数字"32"是一个任意的因子,用来在7英寸的平板电脑水平线上显示大约70多个字符,这是作者想要的字体大小。根据需要进行调整。

textView.setTextSize(getFontSize(activity));
public static int getFontSize (Activity activity) { 
    DisplayMetrics dMetrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
    // lets try to get them back a font size realtive to the pixel width of the screen
    final float WIDE = activity.getResources().getDisplayMetrics().widthPixels;
    int valueWide = (int)(WIDE / 32.0f / (dMetrics.scaledDensity));
    return valueWide;
}

感谢作者的帖子。这个方法非常有效,我将修改它以接受传入的字体大小,并输出正确的字体大小。

这是一个很好的改进建议,是的,你可以指定一个目标大小,然后它可以为所有设备设置通用大小。

0