在android wear上缩放字体大小以充分利用屏幕分辨率

在android wear上缩放字体大小以充分利用屏幕分辨率,android,screen,wear-os,pixel,Android,Screen,Wear Os,Pixel,超级简单的问题:adroid上字体大小与屏幕分辨率的关系是什么?AVD?例如,如果分辨率宽度为100px,文本视图中有10个单间隔字符,如果文本大小为10px,我可以保证文本将占据整个屏幕宽度吗 我的具体问题是,我需要使用textSize缩放10个字符的文本,以使用全屏宽度(仅使用textSize)。如果屏幕分辨率为100 x 100,并且我希望10个字符水平地完全占据屏幕,为什么我不能使用: DisplayMetrics metrics = getResources().getDisplay

超级简单的问题:adroid上字体大小与屏幕分辨率的关系是什么?AVD?例如,如果分辨率宽度为100px,文本视图中有10个单间隔字符,如果文本大小为10px,我可以保证文本将占据整个屏幕宽度吗

我的具体问题是,我需要使用textSize缩放10个字符的文本,以使用全屏宽度(仅使用textSize)。如果屏幕分辨率为100 x 100,并且我希望10个字符水平地完全占据屏幕,为什么我不能使用:

 DisplayMetrics metrics = getResources().getDisplayMetrics();
 float pixelFontSize = metrics.widthPixels / 10f;
 textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, pixelFontSize);
??在我的测试中,我在280 x 280 wtih 280 dpi AVD上得到的文本非常小(分辨率约为1/3),但在另一个AVD 360 x 330 hdpi上,上面的代码产生的文本太大,无法放在一行上。。。我的意思是,当然我可以看到需要从pixcelFontSize中减去一小部分来解释文本布局,但是我的结果到处都是。我一定错过了什么。首先我搞砸了密度和标度测量dp和sp,但逻辑上会说,鉴于我的问题,密度与它毫无关系,对吗

编辑,为了进一步显示问题,这里是我的解决方案,以适应显示缩放文本,使用字体大小,为7或8 AVD的全磨损,方形,圆形和下巴

 switch (metrics.widthPixels) {
            case 280: //280 dpi

                    resolutionMultiplier = .4f;
                    ideoResolutionMultiplier = 0f;

                break;
            case 360: //hdpi
                resolutionMultiplier = .5f;
                ideoResolutionMultiplier = .0f;
                break;
            case 320: //works for round hdpi, chin tvdpi, but the res 320 square 280 dpi too tall....
                if(metrics.xdpi == 280) { 
                    resolutionMultiplier = .45f;
                    ideoResolutionMultiplier = 0f;
                }
                else {
                    resolutionMultiplier = .47f;
                    ideoResolutionMultiplier = 0f;
                }
                break;
            case 400: //280 dpi
                resolutionMultiplier = .55f;
                ideoResolutionMultiplier = 0f;
                break;
            case 480: //360 dpi
                resolutionMultiplier = .71f;
                ideoResolutionMultiplier = 0f;
                break;

        }

        if (mWzTheme.mWordArrays != null
                && mWzTheme.mWordArrays.isIdeographic()) {
            pixelFontSize = (metrics.widthPixels / new Integer(Constants.MAX_LINE_LENGTH_CHINESE_WATCH).floatValue())
                    + (new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue() * ideoResolutionMultiplier);
        }
        else {
            pixelFontSize = (metrics.widthPixels / new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue())
                    + (new Integer(Constants.MAX_LINE_LENGTH_WATCH).floatValue() * resolutionMultiplier);
        }
请尝试此库:

这将使文本完全适合屏幕。(不确定Android Wear target是否存在任何问题。)

尝试此库:


这将使文本完全适合屏幕。(不确定Android Wear target是否存在任何问题。)

以下是一个简单的解决方案:

Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text,0,text.length(),bounds);
int height = bounds.height();
int width = bounds.width();

…但仍然需要一个猜测算法,从屏幕分辨率到用x字符填充屏幕所需的字体大小…

这里有一个简单的解决方案:

Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text,0,text.length(),bounds);
int height = bounds.height();
int width = bounds.width();

…但是仍然需要一个猜测算法,从屏幕分辨率到用x字符填充屏幕所需的字体大小…

不确定您希望用这个实现什么。如果您想使文本适合屏幕,则可能需要测量渲染宽度,并根据该宽度调整字体大小。检查这个问题:计算中还有一个算术错误:
DisplayMetrics.widthPixels
是一个整数,将其除以另一个整数(常数10)会得到四舍五入的结果,无论目标变量是否为浮点。将其除以
10.0f
,这将在操作之前强制将宽度转换为浮动。链接很有趣,但我认为另一个问题。。。。什么是“渲染宽度”?在上面的代码中,我得到了显示器的实际(希望)像素宽度,也称为“分辨率”,除以字符数,那么我应该能够使用该值作为文本大小吗?文本应该和屏幕一样宽是吗?我们谈论的是同一件事:你有10个字符,你想让它适应屏幕的宽度。因为字体的间距是成比例的(“i”和“m”不是相同的宽度),所以在计算宽度时并不明显。如果没有复杂的计算,您可以使用(任意)字体大小测量文本宽度:然后根据可用空间调整文本大小。不过,这种方法并不完美,字符有时会根据字体大小进行调整。这是racs的一个集市问题。首先,我使用的是单间距字体。第二,我们需要从理论上考虑这一点。如果android诚实地使用px(相对于dp和sp),那么这应该简单地用屏幕分辨率除以字符数(例如10)来解决,或者其中的一部分/几倍成为文本大小(又称fotn大小)。但是在使用AVD进行了20个小时的测试后,我相信我可以肯定地说,它就是不能像那样工作。为什么?理论上是怎么回事?或者AVD在分辨率和文本大小方面不准确?不确定你想用它实现什么。如果您想使文本适合屏幕,则可能需要测量渲染宽度,并根据该宽度调整字体大小。检查这个问题:计算中还有一个算术错误:
DisplayMetrics.widthPixels
是一个整数,将其除以另一个整数(常数10)会得到四舍五入的结果,无论目标变量是否为浮点。将其除以
10.0f
,这将在操作之前强制将宽度转换为浮动。链接很有趣,但我认为另一个问题。。。。什么是“渲染宽度”?在上面的代码中,我得到了显示器的实际(希望)像素宽度,也称为“分辨率”,除以字符数,那么我应该能够使用该值作为文本大小吗?文本应该和屏幕一样宽是吗?我们谈论的是同一件事:你有10个字符,你想让它适应屏幕的宽度。因为字体的间距是成比例的(“i”和“m”不是相同的宽度),所以在计算宽度时并不明显。如果没有复杂的计算,您可以使用(任意)字体大小测量文本宽度:然后根据可用空间调整文本大小。不过,这种方法并不完美,字符有时会根据字体大小进行调整。这是racs的一个集市问题。首先,我使用的是单间距字体。第二,我们需要从理论上考虑这一点。如果android诚实地使用px(相对于dp和sp),那么这应该简单地用屏幕分辨率除以字符数(例如10)来解决,或者其中的一部分/几倍成为文本大小(又称fotn大小)。但是在使用AVD进行了20个小时的测试后,我相信我可以肯定地说,它就是不能像那样工作。为什么?理论上是怎么回事?还是AVD的分辨率和文本大小不准确?谢谢。这是处理这个问题的大量代码。但我觉得你可能是对的。到目前为止,我