【问题标题】:Android: measureText() Return Pixels Based on Scaled PixelsAndroid:measureText() 根据缩放像素返回像素
【发布时间】:2011-09-08 02:52:47
【问题描述】:

所以我使用Paint的measureText()方法来测量一段文本的宽度,但是我想根据一定的文本大小来测量文本。假设我想获得一个文本段的宽度,当它占据某个 TextView 时,它将是 20 个缩放像素。我尝试了以下方法:

Paint paint = new Paint();
paint.setTextSize(20);
paint.measureText("sample text");

但是,它似乎不起作用。我相信它会返回相对于较小文本大小的宽度。我觉得我错过了一些会让我扇耳光并大喊大叫的东西。

【问题讨论】:

    标签: android paint text-size


    【解决方案1】:

    你需要像这样得到密度乘数:

    final float densityMultiplier = getContext().getResources().getDisplayMetrics().density;
    final float scaledPx = 20 * densityMultiplier;
    paint.setTextSize(scaledPx);
    final float size = paint.measureText("sample text");
    

    【讨论】:

    • 非常感谢!我的印象是 setTextSize 的参数已经在缩放像素中,所以我对哪里出错感到困惑。现在工作正常。 :-)
    • 不适合我,我将 textview 设置为 20sp 并运行此代码,但大小比预期的要小
    • 检查您的字体大小偏好: sp 与比例无关的像素 - 这与 dp 单位类似,但它也会根据用户的字体大小偏好进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好进行调整。
    • 您可以尝试检查您的主题或样式设置。尝试在另一部手机上执行此操作。为此,请尝试在新的项目设置中应用上述代码。一些非标准的东西导致了这个问题,这取决于你。
    • @schwiz 你有想过这个吗?我面临着类似的问题......我测量文本,然后尝试相应地设置 TextView 的宽度,但我必须将来自 mearueText 的结果乘以密度。
    【解决方案2】:

    必要时我会这样做。

    int textSize = 20;
    for(int i = 2; i<18 && curTextSize< textSize;i+=2)
    {
        this.label.setTextSize(i);
        curTextSize = this.label.getPaint().measureText(this.label.getText().toString());
    }
    

    【讨论】:

      【解决方案3】:

      我没有足够的声望点来评论答案,但参考 @schwiz 和 @AndreasEK 对已接受答案的 cmets:

      measureText()getTextBounds() 不包括填充,因此解决他们问题的方法可能是添加左右填充(或开始和结束填充)

      final float scaleFactor = getContext().getResources().getDisplayMetrics().density;
      final float scaledPx = 20 * scaleFactor;
      paint.setTextSize(scaledPx);
      final float padding = scaleFactor * (textView.getPaddingStart() + textView.getPaddingEnd());
      final float size = paint.measureText("sample text") + padding;
      

      【讨论】:

        【解决方案4】:

        试试

        Paint.SetLinearText(true)
        

        这解决了我的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-27
          • 2023-04-02
          • 2011-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多