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

时间:2016-06-26 22:09:04

标签: android screen wear-os pixel

超级简单的问题:adroid上字体大小与屏幕分辨率的关系是什么? AVD?例如。如果分辨率宽度为100px并且TextView中有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和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);
        }

2 个答案:

答案 0 :(得分:1)

试试这个库:

https://github.com/AndroidDeveloperLB/AutoFitTextView

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

答案 1 :(得分:1)

这是一个简单的解决方案:

class FontColors:
    def __init__(self):
        self.PURP = '\033[95m'
        self.LIGHTBLUE = '\033[94m'
        self.ENDC = '\033[0m'
        self.UNDERLINE = '\033[4m'
        self.LIGHTYELL = '\033[92m'
        self.BYELL = '\033[93m'
        self.FRED = '\033[91m'
        self.BOLD = '\033[1m'

color = FontColors()

# you can try like this - **the color.ENDC meant to make the output normal again.**
print "{0}This is a Purple output{1}".format(color.PURP, color.ENDC)
# or like this
print color.BYELL + "This is a Yellow output" + color.ENDC

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