动态调整应用程序中的文本大小

时间:2015-08-13 05:26:55

标签: android

我正在开发Android,我希望我的应用程序可以从智能手机一直扩展到大屏幕电视。我一直在努力使我的Buttons,TextViews,ListViews和Canvases的字体大小正确缩放。到目前为止,我一直在使用许多自定义方法来完成工作(类型)。

目前,我在运行时从Android设备抓取像素和像素密度,并对它们进行快速计算以获得正确的字体大小。这有点起作用,但事实证明它有点过时而且我很难在更复杂的对象上更改字体,例如通过ArrayAdapters进行通信的ListView。这是我最好的吗?或者是否有更合理的解决方案让我的应用文字大小在所有尺寸的设备之间正确缩放?

我的计划的当前状态:

片剂:

  • 屏幕分辨率:1280x800

  • 像素密度:1

  • 计算字体大小:61sp

  • 外观:布局看起来不错

电话:

  • 屏幕分辨率:1920x1080

  • 像素密度:3

  • 计算字体大小:27sp

  • 外观:非常好。不是一个完美的规模,因为它与平板电脑的比例不同

静态方法:

main()

活动中的应用程序(方法文档说它将int设置为sp值):

public static Point GetScreenDimensions(Context context){
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return size;
}

public static void SetTextSize(Context context){
    TEXT_SIZE_CANVAS = GetScreenDimensions(context).y/15;
    TEXT_SIZE_ACTIVITY = (GetScreenDimensions(context).y/13) / (int) GetScaledDensity(context);
}

public static float GetScaledDensity(Context context){
        return context.getResources().getDisplayMetrics().density;
}

结果: 文本大小主要与设备无关。

1 个答案:

答案 0 :(得分:0)

查看Supporting Multiple Screens documentation - 他们有一个部分讨论文件夹的命名约定,因此您可以根据密度(ldpixhdpi等进行此操作,但他们也可以有tvdpi)。

无论如何,对于不同大小的文本,按钮等,您可以将相应的drawable放在他们自己的文件夹中,然后只使用一个layout文件,让系统拉出正确大小的文件drawable。这些drawable可以是图像,9个补丁或XML文件(您可以在其中定义字体大小,不同颜色等内容)。例如,如果我有一个带有保存图标的布局,那么我的布局只调用ic_save,但我的不同文件夹是:

可绘制-MDPI /

  • ic_save.png(说这是10px宽)

可绘制-HDPI /

  • ic_save.png(然后这将是20px宽)

可绘制-xhdpi /

  • ic_save.png(这将是25px宽)

以下是一些专门针对电视设计的其他有用链接: