如何在XML中使用指定的字体权重

使用XML中的字体function,您可以为字体系列指定各种字体粗细。 例如:

           

但我无法弄清楚如何实际利用这些权重; 无论是在XML(布局/样式)文件中,还是在Java代码中。 它们没有可用于TextView fontWeight属性,并且从ResourcesCompat.getFont(context, R.font.archivo_narrow)创建的Typeface对象没有提到字体权重。

我意识到我只能指定特定的字体资源(即R.font.archivo_narrow_semibold ),但那么在font-family中有一个fontWeight属性是什么意思?

它看起来像android遵循web标准的字体管理和Android应用程序的大小调整。

“font-weight”属性用于定义字体的权重,例如常规或粗体。

但是对于所有其他权重,使用从100到900的数值范围。 Web字体的一个挑战是大多数Web浏览器不能正常支持除普通和粗体之外的字体权重。 下图描述了权重与数字定义的可能映射:

 100 Extra Light or Ultra Light 200 Light or Thin 300 Book or Demi 400 Normal or Regular 500 Medium 600 Semibold, Demibold 700 Bold 800 Black, Extra Bold or Heavy 900 Extra Black, Fat, Poster or Ultra Black 

您可以在此处阅读有关字体粗细的更多信


cc_montserrat_bold.xml

      

cc_montserrat_regular.xml

      

Kotlin用法:

 val textView = dialog.findViewById(android.R.id.message) as TextView val typeface = ResourcesCompat.getFont(context,R.font.cc_montserrat_regular) textView.typeface = typeface 

Android项目截图:

在此处输入图像描述

编辑:这不是请求的解决方案:/

我find了Typeface.Builder类,我认为这就是你想要的。 不幸的是,它仅适用于API级别26及更高版本。 也许很快就会出现一个compat库。

https://developer.android.com/reference/android/graphics/Typeface.Builder.html

  Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf"); builder.setFontVariationSettings("'wght' 700, 'slnt' 20, 'ital' 1"); builder.setWeight(700); // Tell the system that this is a bold font. builder.setItalic(true); // Tell the system that this is an italic style font. Typeface typeface = builder.build(); 

这里你如何在android studio中使用不同的字体权重

  1. 打开app/src/main/res/layout/you_awesome_layout.xml
  2. 选择“ Design tab
  3. 在“组件树”面板中,打开TextView然后选择右侧菜单底部的“ View all attributes
  4. 在“属性”面板中,打开fontFamily下拉列表,然后选择“ More Fonts…
  5. 选择系列YouFontFamilyName
  6. 选择样式Regular/Bold/Semibold/Black/WhateverStyleYouHaveThere

瞧,我认为这是实现你想要的唯一途径