精华内容
下载资源
问答
  • 安卓7.1的默认中文字体什么字体, 安卓7.1的默认中文字体什么字体, 安卓7.1的默认中文字体什么字体,
  • Android中的默认字体系列是什么

    千次阅读 2021-05-26 06:03:10
    但是,如果您查看AOSP,则会在android.graphics.*中加载默认字体。FontListParser从/system/etc/fonts.xml(Android 5.0+)或/system/etc/system_fonts.xml(Android 4.1)中加载默认字体。 默认字体加载在Typeface#...

    d.android.com上没有关于字体系列名称的文档。 但是,如果您查看AOSP,则会在android.graphics.*中加载默认字体。FontListParser从/system/etc/fonts.xml(Android 5.0+)或/system/etc/system_fonts.xml(Android 4.1)中加载默认字体。 默认字体加载在Typeface#init中。

    这两个XML文件都有一些文档。 第一种字体是默认字体。 您可以从设备中拉/system/etc/fonts.xml。 设备制造商或自定义ROM可能会更改默认系统字体。

    照片ts。 xml(Api 21+)

    注意:这是系统字体配置的较新版本(L), 支持更丰富的重量选择。 一些应用程序会期望更老 版本,因此请保持system_fonts.xml和fallback_fonts.xml同步 进行任何更改,即使框架只会读取该文件。

    所有带有名称的字体都将添加到默认列表中。 选择字体 基于匹配:完整的BCP-47语言标签(包括脚本),然后 语言,最后排序(第一个包含字形的字体)。

    外观顺序也是重量匹配的决胜局。 这是 为什么900重量的Roboto领先700重量-我们 请求800重量时,更喜欢前者。 由于大胆的跨度 有效地增加了300的重量,从而确保900是粗体 与500重量配对,确保足够的对比度。

    system_fonts.xml(API 16-20)

    系统字体

    该文件列出了默认情况下将用于所有支持的字形的字体系列。 每个条目都包含一个家庭,该家庭支持的各种名称,以及 最多四个字体文件。 字体文件按照其样式的顺序列出 支持:常规,粗体,斜体和粗斜体。 如果列出的样式少于四种,则 列出的其他字体文件将支持没有关联字体文件的样式。

    第一个家族也是默认字体,它处理未指定的字体请求 特定的字体名称。

    系统字体未处理的任何字形都将导致搜索后备字体。 默认的后备字体在文件/system/etc/fallback_fonts.xml中指定,并且在那里 是一个可选文件,供应商可能会提供该文件以指定要使用的其他后备字体 在/vendor/etc/fallback_fonts.xml中。

    如果您解析fonts.xml文件,则可以找到哪种字体系列使用哪种字体(请参见此处):

    ╔════╦════════════════════════════╦═════════════════════════════╗

    ║ ║ FONT FAMILY ║ TTF FILE ║

    ╠════╬════════════════════════════╬═════════════════════════════╣

    ║ 1 ║ casual ║ ComingSoon.ttf ║

    ║ 2 ║ cursive ║ DancingScript-Regular.ttf ║

    ║ 3 ║ monospace ║ DroidSansMono.ttf ║

    ║ 4 ║ sans-serif ║ Roboto-Regular.ttf ║

    ║ 5 ║ sans-serif-black ║ Roboto-Black.ttf ║

    ║ 6 ║ sans-serif-condensed ║ RobotoCondensed-Regular.ttf ║

    ║ 7 ║ sans-serif-condensed-light ║ RobotoCondensed-Light.ttf ║

    ║ 8 ║ sans-serif-light ║ Roboto-Light.ttf ║

    ║ 9 ║ sans-serif-medium ║ Roboto-Medium.ttf ║

    ║ 10 ║ sans-serif-smallcaps ║ CarroisGothicSC-Regular.ttf ║

    ║ 11 ║ sans-serif-thin ║ Roboto-Thin.ttf ║

    ║ 12 ║ serif ║ NotoSerif-Regular.ttf ║

    ║ 13 ║ serif-monospace ║ CutiveMono.ttf ║

    ╚════╩════════════════════════════╩═════════════════════════════╝

    展开全文
  • Andorid studio 主题样式包。包含DarkBlue.jar、Monokai Sublime Text 3、LadiesNight2.jar、SolarizedLight (Alternate).jar、Zenburn.jar等字体主题
  • 设置 android全局各种字体样式 方便、简洁
  • Android 自定义和可下载字体

    千次阅读 2018-05-29 10:09:49
    Android 一开始的时候,没有使用自定义字体的开箱即用解决方案。设备上只能使用少部分预装字体。 你必须要做一些创新,并为这种小事情编写大量的代码。 最近,Google 为 Android 8.0 推出了自定义和可下载字体。...

    原文:Custom and Downloadable Fonts on Android
    作者:Ivan Kust
    译者:kmyhy

    Android 一开始的时候,没有使用自定义字体的开箱即用解决方案。设备上只能使用少部分预装字体。

    你必须要做一些创新,并为这种小事情编写大量的代码。

    最近,Google 为 Android 8.0 推出了自定义和可下载字体。他们还通过Support Library 版本 26 提供了对早期 Android 版本的支持。

    在本教程中,你将通过创建一个简单的 demo 来了解如何使用它们。在此过程中,您将学习:

    • 如何为 app 添加自定义字体
    • 如何定义字族
    • 如何从提供者添加一个可下载字体
    • 如何检索字体学习

    让我们开始吧!:]

    注:本教程假设你了解用 Kotlin 开发 Android 程序的基础。如果你是一个新手,可以看一下我们的 Kotlin 入门教程。如果你是 Android 开发新手,请先看看我们的 Android教程

    历史:不一样的过去

    一直到最近,要在视图上使用自定义字体,必须进行以下操作:

    1. 将字体文件放到 assets 文件夹
    2. 从 asset 文件将字体加载为 Typeface 对象
    3. 用 setTypeface() 设置视图的 Typeface

    这种方式的主要缺点在于你在布局文件中设置字体——你只能使用代码:

    val myTypeface = Typeface.createFromAsset(assets, "fonts/myFont.ttf")
    myTextView.typeface = myTypeface

    要解决这种情况,你可以扩展这个视图类并添加一个自定义属性,用于从布局中传递字体文件。这是很好,但仍然存在一些问题:

    • 你必须扩展每个想使用自定义字体的 View
    • 有的设备加载 assets 时会花很长时间,因此你必须将字体缓存到内存中
    • 某些情况下会出现问题——例如如果你必须修改 toolbar 上的字体时

    更不必说,仅仅为了设置一个自定义字体就必须扩展一个 TextView 的感觉很不好。

    开始

    前提条件

    要使用自定义字体,首先必须安装最新的 AndroidStudio3.x。这一点很重要,因为 AndroidStudio2.x 不支持某些特性,例如字体资源目录。

    安装 AndroidStudio 时,请按照我们在 Android 开发教程中所说的去做。

    您的第一个任务是切换到最新的支持库。您可以在这里下载开始项目

    打开 AndroidStudio 并用 File\Open 导入开始项目。选择开始项目的解压缩位置,然后单击对话框上的 Open。

    当项目打开并同步时,build& run。

    你会看到一个简单的 Font Quiz app。如果你开始答题,你会被提 5 个问题,让你猜出文本所用的字体。

    等等——这些文字显示的都是同一个(默认)字体!我们后面会解决这个问题。首先来添加一个最新支持库。

    添加最新支持库

    打开 \app 文件夹下的 build.gradle 文件(在 Android project 视图中,你可以在 Gradle Scripts 文件夹下找到它),然后修改其中的 dependecies{…} 一行:

    implementation ‘com.android.support:support-v4:27.0.2’

    这将添加最新版本的 Android 支持库,该支持库将使 API 14 以后支持自定义字体和可下载字体。

    您还需要将 compileSdkVersion 和 targetSdkVersion 更改为27。最后,将 other support library dependencies(即 appcompat 和 design) 更改为27.0.2版本。

    然后,点击编辑器窗口顶端 gradle 通知中的 Sync now。

    当 gradle 同步完,build & run,看看是否正常:

    看起来没有任何改变,但是我们已经为自定义字体的添加做好了准备!

    把字体打包

    谷歌在 Android 8 推出了字体资源的新特性。将字体文件放入res\fonts 文件夹中,就能将其已资源方式打包到 .apk 中。这些字体会编译到 R 文件中,同时可以在 Android Studio 中可以像字符串、drawable 和 color 资源一样使用。

    注:字体资源只能在 Android Studio 3.x 中使用,而不能在 2.x 中使用。

    接下来你要做的就是给应用程序添加一个自定义的 .ttf 字体。在这里下载OpenSans-regular 字体。

    回到 Android Studio,选择 project 导航器中的 Android:

    点击 res 文件夹,按 cmd+N(或者 File\New)然后选择 Directory。

    弹出一个对话框,要你输入目录名,输入 font:

    现在,右键单击新目录,然后单击“在Finder中显示”(MacOS)、“在资源管理器中显示”(Windows)或“在文件中显示”(Linux)。将下载的 OpenSans-Regular.ttf 文件移到您打开的字体文件夹中,并将其重命名为opensans_regular.ttf。在Android资源名只能使用字母数字和下划线。

    回到 Android Studio 并打开res\layout\activity_main.xml文件。找到id 为 tvFonQuiz 的 AppCompatTextView。向其添加以下属性:

    app:fontFamily="@font/opensans_regular"
    

    text view 的布局代码现在是这个样子:

    <android.support.v7.widget.AppCompatTextView
      android:id="@+id/tvMessage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/quiz_message"
      android:textAlignment="center"
      app:fontFamily="@font/opensans_regular"
      app:layout_constraintBottom_toTopOf="@+id/startButton"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent" />

    Build & run。

    你可以看到文字消息变成了 OpenSans 字体。真简单!

    创建字族

    另一个新功能是,您可以创建字族,用于包含一系列字体文件,以及它们的样式和字重。要创建一个新的字族,您实际上需要创建一个新的 XML 字体资源。好处是您可以作为一个整体访问它,而不是将每个样式和字重的单个字体文件引用为单独的资源。

    你现在可以创建一个新字族。首先,来创建 OpenSans 的粗体

    重复上面的步骤,将新的字体文件添加到项目的字体文件夹中。将文件重命名为opensans_bold.ttf。

    接下来创建一个字族资源。

    点击 res\font 文件夹,按 ⌘N (或者 File\New) 并选择 Font resource file。

    在 File name 栏输入 opensans 然后点击 OK。

    Android studio 会生成一个空的字族资源:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
    
    </font-family>

    用 标签添加两个字体文件到字族中。这个标签有 3 个属性:

    • font: 字体文件的资源 ID
    • fontStyle: 字体文件的风格,可以是 normal 或 italic
    • fontWeight: 字重

    为了添加 regular 和 italic 字体,你需要用两个 元素:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
      <font
          android:fontStyle="normal"
          android:fontWeight="400"
          android:font="@font/opensans_regular" />
      <font
          android:fontStyle="italic"
          android:fontWeight="400"
          android:font="@font/opensans_bold" />
    </font-family>

    注意,为了向后兼容 8.0 以下 Android 版本,还必须以命名空间 app 来声明所有字体属性。这将使用支持库的自定义字体实现。添加它们之后,您的资源文件应该如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <font
            android:font="@font/opensans_regular"
            android:fontStyle="normal"
            android:fontWeight="400"
            app:fontFamily="@font/opensans_regular"
            app:fontStyle="normal"
            app:fontWeight="400" />
        <font
            android:font="@font/opensans_bold"
            android:fontStyle="italic"
            android:fontWeight="400"
            app:font="@font/opensans_bold"
            app:fontStyle="italic"
            app:fontWeight="400" />
    </font-family>

    现在回到 res/layout/activity_main.xml 修改 tvMessage 的 app:fontFamily 属性为 opensans:

    <android.support.v7.widget.AppCompatTextView
      android:id="@+id/tvMessage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/quiz_message"
      android:textAlignment="center"
      app:fontFamily="@font/opensans"
      app:layout_constraintBottom_toTopOf="@+id/startButton"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent" />

    Build & run。

    在布局中使用自定义字体

    在前面的步骤中,您已经看到了如何向 TextView 添加自定义字体。现在,您将向主题添加自定义字体,更改所有使用该主题的 activity 的默认字体。

    打开文件 res/values/styles.xml。

    修改 app 的 Theme.FontQuiz ——加入 fontFamily 属性:

    <style name="Theme.FontQuiz" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="fontFamily">@font/opensans</item>
    </style>

    Build & run。

    您可以看到在整个应用程序中都使用了 OpenSans:

    在代码中使用自定义字体

    您也可以通过代码来设置自定义字体。为此,您将用到支持库中的 ResourcesCompat 类。在 MainActivity 的 onCreate()方法的末尾输入:

    val typeface = ResourcesCompat.getFont(this, R.font.opensans_bold)
    startButton.typeface = typeface

    Build & run。

    你可以看到开始按钮被设置为 OpenSans 粗体。

    注意,您使用支持库来支持小于 Android 8.0 的版本。

    可下载字体

    你已经了解了自定义字体的工作方式,那么让我们跳到另一个新知识点,可下载字体。可下载字体允许你按需下载或在应用程序启动时向应用程序添加字体。

    它还有其它好处:

    • 只在需要时才下载字体
    • 减少 apk 的大小
    • 通过字体提供者在多个 app 共享字体

    字体提供者的机制

    字体提供者负责检索和缓存跨应用程序使用的可下载字体。请求字体的过程如下:

    所有使用可下载字体的应用程序都通过 FontsContractCompat 传递它们的请求。然后,它与请求的字体提供者进行通信。字体提供者是负责获取和缓存适当字体的应用程序。可以在设备上安装多个字体提供者,但目前只有 Google 字体提供者可用。

    安全和证书

    为了在使用字体提供者时确保安全,你必须提供字体提供者的签名证书。这样 Android 才能够校验字体提供者的身份。你必须在设备未预安装的字体提供者时或使用支持库时这样做。

    接下来的任务是添加 Google 字体提供者的证书。

    点击 res\values 文件夹,按 ⌘N (或 File\New) 并选择 Values resource file。

    在对话框中,命名为 font_certs 然后点 Ok。

    以字符串数组的形式指定字体提供者证书。如果字体提供者有多个证书集,则必须定义一个字符串数组的数组。支持库所用的 Google 字体提供者使用两组证书,下一步是为每个组证书定义一个数组。

    在新文件中添加一个字符串数组,在“”节中添加一个 ,命名为 com_google_android_gms_fonts_certs_dev。

    为它添加一个 item,内容如下:

    <item>
    MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
    </item>

    另外添加一个 string arry,名为 com_google_android_gms_fonts_certs_prod 然后为它添加一个 item ,内容如下:



    <item>
    MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
    </item>

    最后,创建一个数组,名为 com_google_android_gms_fonts_certs,将之前定义的两个 string arrays 作为其 item.

    你的 font_certs.xml 文件变成这个样子:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="com_google_android_gms_fonts_certs">
            <item>@array/com_google_android_gms_fonts_certs_dev</item>
            <item>@array/com_google_android_gms_fonts_certs_prod</item>
        </array>
        <string-array name="com_google_android_gms_fonts_certs_dev">
            <item>
                MIIEqDCCA5CgAwIBA…
            </item>
        </string-array>
        <string-array name="com_google_android_gms_fonts_certs_prod">
            <item>
                MIIEQzCCAyugAwIBAgIJAMLgh0…
            </item>
        </string-array>
    </resources>

    Build & run。

    没有任何变化,但已经为可下载字体准备好了。

    在代码中使用可下载字体

    FontQuiz app 还缺少一个重要的功能——问题中的文本应该只使用提问到的字体。

    你可以用一个请求来获取可下载的字体,并将它们以代码方式应用到 View 中。必须使用支持库中的 FontsContractCompat 类来支持 8.0 以下的 Android 版本。

    你的任务将是使用它来请求和设置一个随机字体的问答页面。

    打开 QuestionActivity 的 showFont() 方法。

    用于测验的字族名位于 res\value\family_names.xml 文件中的一个 list 中。选择一个随机字体的问题和对应 4 个选项的代码已经写好。你的任务是请求并显示传递给 showFont() 的字体。

    首先,隐藏所有按钮并显示一个 ProgressView,表示字体正在被加载:

    buttons.forEach { button -> button.isEnabled = false }
    progressView.visibility = View.VISIBLE

    Build & run。

    点击 “Start Quiz” ,当第一个问题出来时,你会看到所有按钮禁用,加载进度显示。

    接下来该创建字体请求。

    创建一个字体请求

    接下来的任务是添加一个请求用于下载字体到 QuestionActivity。

    创建一个 query 字串,以及一个可下载字体的请求:

    val query = "name=$familyName"
    val request = FontRequest(
      "com.google.android.gms.fonts",
      "com.google.android.gms",
      query,
      R.array.com_google_android_gms_fonts_certs
    )

    注:确认你使用的是来自 android.support.v4.provider 包的FontRequest类。android.provider 包的和支持库不兼容。

    创建 FontRequest 时,你必须传入这些参数:

    • provider authority – 目前为止只能使用 Google 提供者 com.google.android.gms.fonts
    • provider package – 对于google 的字体提供者,包名是 com.google.android.gms
    • query - 你所请求的字体的查询字符串
    • 证书数组 – 用于校验提供者

    要请求一个新字体,需要使用 FontsContractCompat 的 requestFont() 方法。在 showFont() 最后一句加入:

    FontsContractCompat.requestFont(
        this,
        request,
        object : FontsContractCompat.FontRequestCallback() {
          override fun onTypefaceRetrieved(typeface: Typeface?) {
    
          }
    
          override fun onTypefaceRequestFailed(reason: Int) {
    
          }
        },
        handler
    )

    请求可下载字体是异步操作。 requestFont() 方法过一个 FontsContractCompat.FontRequestCallback 接口返回结果。如果请求成功, FontContractorCompat 会调用 onTypefaceRetreived() 方法。用传回的 Typeface 对象设置 View 的字体。启用所有按钮并隐藏进度指示器:

    override fun onTypefaceRetrieved(typeface: Typeface?) {
      buttons.forEach { button -> button.isEnabled = true }
    
      progressView.visibility = View.INVISIBLE
      fontTextView.typeface = typeface
    }

    如果请求错误,FontContractorCompat 会调用 onTypefaceRequestFailed()。通过向 showError() 传递一个错误代码来显示错误信息。

    override fun onTypefaceRequestFailed(reason: Int) {
      showError(reason)
    }

    请求字体时的最后一件东西是一个 Handler 实例。

    注:简而言之,处理程序使你可以将代码放到不同的线程执行。

    FentContractorCompat 用它来在于 Handler 关联的线程检索字体。确保您提供的 Handle 与UI线程无关。

    val handlerThread = HandlerThread("fonts")
    handlerThread.start()
    
    handler = Handler(handlerThread.looper)

    为了方便起见,创建一个私有字段,该属性负责保存这个 handler,通过这个属性初始化和检索 handler:

    private var handler: Handler? = null
    
    private val handlerThreadHandler: Handler
      get() {
        if (handler == null) {
          val handlerThread = HandlerThread("fonts")
          handlerThread.start()
          handler = Handler(handlerThread.looper)
        }
    
        return handler ?: throw AssertionError("Set to null by another thread")
      }

    第一次使用这个 handlerThreadHandler 属性时将初始化 handler 并返回它。

    现在 showFont() 最后一句变成这个样子:

    FontsContractCompat.requestFont(
        this,
        request,
        object : FontsContractCompat.FontRequestCallback() {
          override fun onTypefaceRetrieved(typeface: Typeface?) {
            buttons.forEach { button -> button.isEnabled = true }
    
            progressView.visibility = View.INVISIBLE
            fontTextView.typeface = typeface
          }
    
          override fun onTypefaceRequestFailed(reason: Int) {
            showError(reason)
          }
        },
        handlerThreadHandler
    )

    Build& run。开始答题:

    现在你会在每个问题上看到对应的字体!:]

    检索字体信息

    当你回答一个问题后,显示一个简单的问题所指字体的信息是一个不错的主意。因此,你的下一个任务是检索有关字族的信息。

    找到 QuestionActivity 的 loadFontFact() 方法。

    要获得字体信息,需要用 FontsContractCompact 的 fetchFonts() 方法。和之前一样,首先创建一个 FontRequest:

    val query = "name=$familyName"
    val request = FontRequest(
      "com.google.android.gms.fonts",
      "com.google.android.gms",
      query,
      R.array.com_google_android_gms_fonts_certs
    )

    然后传递给 fetchFonts() 方法。

    val result = FontsContractCompat.fetchFonts(this@QuestionActivity, null, request)

    如果指定名称有效,这将返回所请求字族的信息。您将在返回的对象的字体数组中查找它。你可以从返回对象中检索字体数组。

    注:不像 requestFont(),fetchFonts() 是同步的。它会在调用线程中执行并返回有效字体的信息。

    每个字体有以下属性:

    • uri – 字体提供者中该字体文件的 URI
    • ttcIndex – 如果提供一个 TTC_INDEX 文件,则指向该索引,否则返回 0
    • weight – 字重,整数值
    • italic – 如果字体风格为 italic,返回 true

    检查 result 的状态码,如果为 ok 则显示该字体的字重:

    if (result.statusCode == FontsContractCompat.FontFamilyResult.STATUS_OK) {
      with(textView) {
        text = getString(R.string.correct_answer_message, familyName, result.fonts[0].weight)
        visibility = View.VISIBLE
      }
    }

    字符串 R.string.correct_answer_message 已经有值了,并且它有一个代表字重的整型参数。

    获取字体数据是一个阻塞操作,应该在后台执行。使用 kotlin 的 doAsync 和 uiThread 块在后台线程上执行它:

    doAsync {
      val query = "name=$familyName"
      val request = FontRequest(
        "com.google.android.gms.fonts",
        "com.google.android.gms",
        query,
        R.array.com_google_android_gms_fonts_certs
      )
    
      val result = FontsContractCompat.fetchFonts(this@QuestionActivity, null, request)
    
      if (result.statusCode == FontsContractCompat.FontFamilyResult.STATUS_OK) {
        uiThread {
    
          with(textView) {
            text = getString(R.string.correct_answer_message, familyName, result.fonts[0].weight)
            visibility = View.VISIBLE
          }
        }
      } 
    }

    最后,进行错误处理并隐藏进度指示器。loadFontFact() 的最终代码如下:

    progressView.visibility = View.INVISIBLE
    
    doAsync {
      val query = "name=$familyName"
      val request = FontRequest(
          "com.google.android.gms.fonts",
          "com.google.android.gms",
          query,
          R.array.com_google_android_gms_fonts_certs
      )
    
      val result = FontsContractCompat.fetchFonts(this@QuestionActivity, null, request)
    
      if (result.statusCode == FontsContractCompat.FontFamilyResult.STATUS_OK) {
        uiThread {
          progressView.visibility = View.GONE
    
          with(textView) {
            text = getString(R.string.correct_answer_message, familyName, result.fonts[0].weight)
            visibility = View.VISIBLE
          }
        }
      } else {
        uiThread {
          showError(result.statusCode)
        }
      }
    }

    Build & run。回答一个问题,你会看到关于该字体的信息。

    XML 资源的可下载字体

    你还可以将可下载字体定义为 XML 资源。

    在 res\font 文件夹右键点击。选择 New\Font resource file。在对话框中,将文件名输入为 acme。

    为 元素添加字体相关属性:

    <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:app="http://schemas.android.com/apk/res-auto"
      app:fontProviderAuthority="com.google.android.gms.fonts"
      app:fontProviderPackage="com.google.android.gms"
      app:fontProviderQuery="Acme"
      app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
    </font-family>

    这些内容不陌生。是你设置的这些属性是前面你传递给 requestFont() 的参数。只不过这次是放到 XML 中了。

    引用创建的字体资源,就像使用字族列和 .ttf 文件一样。打开res\activity_main.xml 布局文件,并将 acme 字体设置给 TextView tvFontQuiz:

    <android.support.v7.widget.AppCompatTextView
      android:id="@+id/tvFontQuiz"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/app_name"
      android:textColor="@android:color/black"
      android:textSize="@dimen/logo_text_size"
      android:textStyle="bold"
      app:fontFamily="@font/acme"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"               
      app:layout_constraintTop_toBottomOf="@+id/horizontalGuideline" />

    重复这个过程,添加 Bilbo Swash Caps 字体。

    打开 res/activity_main.xml,将 TextView tvTheGreat 的 font 属性设为 bilbo_swash_caps:

    <android.support.v7.widget.AppCompatTextView
      android:id="@+id/tvTheGreat"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/the_great"
      android:textColor="@color/colorAccent"
      android:textSize="@dimen/logo_text_size_small"
      app:fontFamily="@font/bilbo_swash_caps"
      app:layout_constraintBottom_toTopOf="@+id/horizontalGuideline"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent" />

    Build & run:

    现在看到 FontQuiz 标签的字体了吗?第一次运行 app 时,你会注意字体在显示前有一个下载过程,因为它还没有下载并缓存。

    在 manifest 中提前声明字体

    还有一个意外之喜——你可以指定让 Android 在 App 启动前预加载的字体!为此,你必须在 manifest 中进行声明。

    点击 res\values 文件夹,按 ⌘N (或者 File\New) ,选择 Values resource file。

    在对话框中命名文件为 preloaded_fonts。

    在 resources 标签下添加字体数组,name 设为 preloaded_fonts:

    <array name="preloaded_fonts" translatable="false">
      <item>@font/acme</item>
      <item>@font/bilbo_swash_caps</item>
    </array>

    打开 manifests\AndroidManifest.xml 在 标签中添加 元素:

    <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

    Build & run:

    呵!你的字体现在是预加载的了,只要应用程序一启动就可以使用。

    你创建了一个漂亮的 Font Quiz app——来玩一下吧!你能 5 题全对吗?:]

    接下来做什么

    这里是具有完整代码的最终项目

    选择你知道如何向 app 中添加自定义和可下载的字体了。

    google的官方文档是一个查找更多信息的好地方:font resourcesFonts in XMLDownloadable fonts

    如果你想看看 Google 字体提供者都有哪些字体,请看这里

    如果有任何问题或其他自定义和可下载字体的使用技巧,请在下面留言!

    展开全文
  • 通过自定义style,从主题中动态设置app全局字体的Demo。
  • 什么设置系统字体,应用中字体会根据系统字体改变 设置系统字体显示大小后,应用中的字体也根据也跟随系统设置而变化,这样是不是之前写好的整个布局就有可能乱了。 拿TextView源码看下面setTextSize源码看下设置...

    为什么设置系统字体,应用中字体会根据系统字体改变

    设置系统字体显示大小后,应用中的字体也根据也跟随系统设置而变化,这样是不是之前写好的整个布局就有可能乱了。

    拿TextView源码看下面setTextSize源码看下设置字体细节

    /**
    *  unit 设置字体的单位 比如 sp,px,dp等等
    *  size  字体大小
    **/
    public void setTextSize(int unit, float size) {
            if (!isAutoSizeEnabled()) {
                setTextSizeInternal(unit, size, true /* shouldRequestLayout */);
            }
        }
    

    继续往下看

        private void setTextSizeInternal(int unit, float size, boolean shouldRequestLayout) {
            Context c = getContext();
            Resources r;
            // 获取Resources 对象,当前View没有就获取系统的一般当前view都会有
            if (c == null) {
                r = Resources.getSystem();
            } else {
                r = c.getResources();
            }
            // 将设置的字体大小根据 unit 单位和DisplayMetrics进行换算
            setRawTextSize(TypedValue.applyDimension(unit, size, r.getDisplayMetrics()),
                    shouldRequestLayout);
        }
    

    继续看下TypedValue.applyDimension() 如何计算字体大小的

       // 字体换算方法
        
         public static float applyDimension(int unit, float value,
                                           DisplayMetrics metrics)
        {
            switch (unit) {
            case COMPLEX_UNIT_PX:
                return value;
            case COMPLEX_UNIT_DIP:
                return value * metrics.density;
            case COMPLEX_UNIT_SP:
                return value * metrics.scaledDensity;
            case COMPLEX_UNIT_PT:
                return value * metrics.xdpi * (1.0f/72);
            case COMPLEX_UNIT_IN:
                return value * metrics.xdpi;
            case COMPLEX_UNIT_MM:
                return value * metrics.xdpi * (1.0f/25.4f);
            }
            return 0;
        }
    

    可以看出,根据不同unit计算出来的字体大小不一样,px是不需要就算,,dip是根据density 去计算,sp是根据 scaledDensity计算字体大小,pt是根据xdpi 和一个指定指数计算等等。当改变系统现实大小的时候,参与字体计算的值只要有变化都会改变字体大小。

    通过改变系统字体大小,打log看以DisplayMetrics中的值只有scaledDensity 这个值有变化 (可以参考) 所以只要我们在系统字体改变的时候,控制这个值不要改变就可以了,那这个值是在那里赋值?通过一顿瞎点,点到了ResourceImpl这个类里边的updateConfiguration
    方法,并且在方法中看到了这个字段的赋值

     public void updateConfiguration(Configuration config, DisplayMetrics metrics,
                                        CompatibilityInfo compat) {
         
         //.....
         
                    // Protect against an unset fontScale.
                    mMetrics.scaledDensity = mMetrics.density *
                            (mConfiguration.fontScale != 0 ? mConfiguration.fontScale : 1.0f);
    
               // .....
        }
    

    原来scaledDensity 是fontScale和density计算得来的,density 改变系统字体是不会变化的,那就是fontScale这玩意导致的,那这玩意是那的,通过一顿点击发现是Configuration类的一个public 字段,那这fontScale这个字段系统是什么时候设置的呢?一顿点和排查最后找到了ActivityManageService中的updateFontScaleIfNeeded的方法

    private void updateFontScaleIfNeeded(@UserIdInt int userId) {
           //.....
            synchronized (this) {
                if (getGlobalConfiguration().fontScale == scaleFactor) {
                    return;
                }
                 //.....
    }
    

    再看下这个方法是哪里调用的,又是一通乱点发现是在ActivityManageService中的一个内部类FontScaleSettingObserver
    中的一个onChange方法中调用的,

     private final class FontScaleSettingObserver extends ContentObserver {
         
            @Override
            public void onChange(boolean selfChange, Uri uri, @UserIdInt int userId) {
                if (mFontScaleUri.equals(uri)) {
                    updateFontScaleIfNeeded(userId);
                } else if (mHideErrorDialogsUri.equals(uri)) {
                    synchronized (ActivityManagerService.this) {
                        updateShouldShowDialogsLocked(getGlobalConfiguration());
                    }
                }
            }
        }
    

    我猜这个肯定是一个观察者模式,观察到系统配置有相关变化,随后去设置一系列的值,那我们也可以手动的改变这个fontScale值为基准的,不让其随着系统改变而改变、
    网上找了段代码,在activity中添加就可以了,源码也不知道分析有误没,如果有误欢迎来提

     @Override
        public Resources getResources() {
            Resources resources = super.getResources();
            Configuration configuration =new Configuration();
            configuration.setToDefaults();
            resources.updateConfiguration(configuration,resources.getDisplayMetrics());
            return resources;
        }
    
    展开全文
  • Android APP修改全局字体

    千次阅读 2019-06-25 11:24:58
    复制工具类 package ... import android.app.Activity; import android.content.Context; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.text.TextU...

    字体下载网址:自定义字体.7z
    1 复制工具类

    package com.lym.uifont.utils;
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Typeface;
    import android.support.annotation.NonNull;
    import android.text.TextUtils;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import java.lang.reflect.Field;
    
    /**
     * @author liyanmei
     * @date 2019/6/25
     * @describe
     */
    public class TypefaceUtil {
        /**
         * 为给定的字符串添加HTML红色标记,当使用Html.fromHtml()方式显示到TextView 的时候其将是红色的
         *
         * @param string 给定的字符串
         * @return
         */
        public static String addHtmlRedFlag(String string) {
            return "<font color=\"red\">" + string + "</font>";
        }
    
        /**
         * 将给定的字符串中所有给定的关键字标红
         *
         * @param sourceString 给定的字符串
         * @param keyword      给定的关键字
         * @return 返回的是带Html标签的字符串,在使用时要通过Html.fromHtml()转换为Spanned对象再传递给TextView对象
         */
        public static String keywordMadeRed(String sourceString, String keyword) {
            String result = "";
            if (sourceString != null && !"".equals(sourceString.trim())) {
                if (keyword != null && !"".equals(keyword.trim())) {
                    result = sourceString.replaceAll(keyword, "<font color=\"red\">" + keyword + "</font>");
                } else {
                    result = sourceString;
                }
            }
            return result;
        }
    
        /**
         * <p>Replace the font of specified view and it's children</p>
         *
         * @param root     The root view.
         * @param fontPath font file path relative to 'assets' directory.
         */
        public static void replaceFont(@NonNull View root, String fontPath) {
            if (root == null || TextUtils.isEmpty(fontPath)) {
                return;
            }
    
    
            if (root instanceof TextView) { // If view is TextView or it's subclass, replace it's font
                TextView textView = (TextView) root;
                int style = Typeface.NORMAL;
                if (textView.getTypeface() != null) {
                    style = textView.getTypeface().getStyle();
                }
                textView.setTypeface(createTypeface(root.getContext(), fontPath), style);
            } else if (root instanceof ViewGroup) { // If view is ViewGroup, apply this method on it's child views
                ViewGroup viewGroup = (ViewGroup) root;
                for (int i = 0; i < viewGroup.getChildCount(); ++i) {
                    replaceFont(viewGroup.getChildAt(i), fontPath);
                }
            }
        }
    
        /**
         * <p>Replace the font of specified view and it's children</p>
         * 通过递归批量替换某个View及其子View的字体改变Activity内部控件的字体(TextView,Button,EditText,CheckBox,RadioButton等)
         *
         * @param context  The view corresponding to the activity.
         * @param fontPath font file path relative to 'assets' directory.
         */
        public static void replaceFont(@NonNull Activity context, String fontPath) {
            replaceFont(getRootView(context), fontPath);
        }
    
    
        /*
         * Create a Typeface instance with your font file
         */
        public static Typeface createTypeface(Context context, String fontPath) {
            return Typeface.createFromAsset(context.getAssets(), fontPath);
        }
    
        /**
         * 从Activity 获取 rootView 根节点
         *
         * @param context
         * @return 当前activity布局的根节点
         */
        public static View getRootView(Activity context) {
            return ((ViewGroup) context.findViewById(android.R.id.content)).getChildAt(0);
        }
    
        /**
         * 通过改变App的系统字体替换App内部所有控件的字体(TextView,Button,EditText,CheckBox,RadioButton等)
         *
         * @param context
         * @param fontPath 需要修改style样式为monospace:
         */
    //    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    //    <!-- Customize your theme here. -->
    //    <!-- Set system default typeface -->
    //    <item name="android:typeface">monospace</item>
    //    </style>
        public static void replaceSystemDefaultFont(@NonNull Context context, @NonNull String fontPath) {
            replaceTypefaceField("MONOSPACE", createTypeface(context, fontPath));
        }
    
        /**
         * <p>Replace field in class Typeface with reflection.</p>
         */
        private static void replaceTypefaceField(String fieldName, Object value) {
            try {
                Field defaultField = Typeface.class.getDeclaredField(fieldName);
                defaultField.setAccessible(true);
                defaultField.set(null, value);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    2.修改style样式

      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <!-- Set system default typeface -->
        <item name="android:typeface">monospace</item>
        </style>
    

    3.将需要用到的ttf文件导入src/main/assets/fonts文件夹下
    4.application的onCreate方法中调用

    package com.lym.uifont;
    
    import android.app.Application;
    
    import com.lym.uifont.utils.TypefaceUtil;
    
    /**
     * @author liyanmei
     * @email lym_liyanmei@qq.com
     * @date 2019/6/25
     * @describe
     */
    public class MyApp extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            TypefaceUtil.replaceSystemDefaultFont(this,"fonts/font_zhangcao.ttf");
        }
    }
    
    

    5 androidmanifest配置

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.lym.uifont">
    
        <application
            android:name=".MyApp"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    参考网址:Android APP修改全局字体

    展开全文
  • Android字体资源

    千次阅读 2020-07-02 00:18:21
    Android字体资源1.自定义字体1.1.文件位置1.2.资源引用1.3.语法1.4.示例2.下载字体2.1.文件位置2.2.资源引用2.3.语法2.4.示例 字体资源定义可在应用中使用的自定义字体。字体可以是单独的字体文件或字体文件的集合,...
  • android 自定义全局字体

    热门讨论 2013-12-03 17:46:01
    android 自定义全局字体 在assets下面建font文件夹,放入第三方字体(例:娃娃体)
  • android 替换全局字体

    千次阅读 2018-08-31 10:05:51
    hxghookfont ...插件式插入字体库 引入方式 allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { implementation 'com.github.huangxiaoguo1:hx...
  • 动态设置android webview字体大小DEMO

    热门讨论 2012-03-08 17:35:23
    动态设置android webview字体大小的实例
  • 在代码中实现TextView的切换字体的方式和在布局文件中修改TextView的字体方式(如宋体、娃娃体)
  • Android TabLayout修改选中字体大小

    千次阅读 2018-08-30 10:51:00
    style的方式只能改整体的大小,修改选中字体大小就需要用到CustomView了 效果: 核心就是给TabLayout设置自定义布局,通过自定义布局拿到id,然后设置选中时的...LinearLayout xmlns:android="http:...
  • android英文用的是什么字体

    千次阅读 2013-03-29 14:00:06
    DroidSansFallback 字体是 Google 为手机"Android"内建的系统字体,支持繁体中文、简体中文、韩文、日文。支持4种文字的同时,DroidSansFallback.ttf 字体文件的体积仅有 3.04MB大小,效果类似于微软雅黑字体,而且...
  • 有时为了美化UI,需要在指定控件中显示特定的字体,而这个字体Android系统中却没有,此时可将需要的字体文件存放在assets文件夹中,在为控件设置Typeface :View.setTypeface(Typeface.createFromAsset(getAssets...
  • Android studio 如何设置字体大小

    万次阅读 多人点赞 2018-04-26 09:37:23
    Android studio字体设置分为两种:一种是软件字体设置,另一种是代码字体设置。此处以Android Studio 2.2 正式版为例做说明。 1. 软件字体设置 1.1 从File---&gt;Settings启动设置面板如下图: 1.2 依次选择...
  • 编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/73480651 Demo展示图片修改部分字体 系统自带字体 ...android:typeface="xxx" 通过Typeface.createF
  • Android中使用字体文件

    千次阅读 2019-01-11 19:55:53
    Android中是可以设置字体的。
  • Android WebView加载TTF字体

    千次阅读 热门讨论 2016-09-01 17:06:09
    今天偶遇一需求,需要设置WebView的字体Android中的TTF字体相同,下面我将和大家分下下如何在WebView中设置外部TTF字体。 很简单,相信玩过CSS的童靴都熟悉下面的代码: @font-face {  font-family:myfont;  src...
  • Android studio 放大字体

    千次阅读 2019-07-01 08:57:17
    1.https://jingyan.baidu.com/article/9f7e7ec0b31aa26f2915546b.html 2.https://jingyan.baidu.com/article/4e5b3e191478dc91901e2480.html
  • android 字体设置为中等粗细

    千次阅读 2020-12-22 14:18:16
    Android TextView设置字体粗细只有三种状态,textStyle取值只有bold、nomral、italic、客户需求是字体是medium粗细,只因ios是有medium属性,Android被要求要一样; 要实现这种方式,我们可以换另外一种思想去做,...
  • Android Studio设置字体大小

    千次阅读 2020-03-31 16:56:06
    1、File -- Settings... 打开设置窗口 2、Editor -- Colors & Fonts -- Font ...Font为字体设置 3、将Size中的数值调大即可 Apply 应用:查字体大小是否合适 最后点击OK ...
  • Android Studio中的字体设置

    万次阅读 2017-06-29 15:26:40
    Android Studio使用中,设置最多的就是code... 编码区域字体大小: Console区域字体大小 侧标栏及标题栏,其实就是Android Studio工具整体的字体大小 Presentation Mode字体大小 注:什么是Presentation Mode?点击V
  • Android WebView使用本地字体

    千次阅读 2017-11-20 16:18:10
    Android WebView使用本地字体要点 1.修改Html Style,Body标签内容,引用本地字体。 2.将字体放到 assets 文件夹中。<style> @font-face { font-family: myFont; src: url('file:///android_asset/fonts/myFont....
  • 但是美工就是要中粗字体,她会说iOS能做出来你为什么做不出来,被怼得很难受。这里不得不吐槽一下,Android自带的控件没有哪个可以被美工看上眼的,很多控件都要通过自定义来达到美工和交互要求的效果。Android官方...
  • Android 仿微信全局字体大小调整

    千次阅读 2019-02-23 14:15:45
    1、自定义字体调整控件 2、滑动按钮改变当前页面预览字体大小 3、返回时,保存放大倍数并重启应用 4、初始化应用时配置字体放大倍数。 四、Demo地址 五、内容推荐 一、前言 最近项目添加了一项调整应用字体...
  • Android TextView设置自定义字体

    万次阅读 2018-08-21 20:21:33
    前言:这个版本的开发中,伟大的ue们重新给了新的字体文件让我们给换上,...Android TextView怎么设置自定义字体呢?很简单: 1.将下载好的字体库放入到 asset下面,类似下面图片: 2. 获取字体 : Constant...
  • Android TextView textStyle 设置字体样式

    千次阅读 2021-01-16 11:51:41
    textStyle 是设置文本字体样式, Android 提供了三个样式 1normal 正常字体 2bold 粗体 3italic 斜体 1 xml 中使用如下 <TextView android:id="@+id/text" android:layout_width="wrap_content" ...
  • Android 如何批量改变字体颜色

    千次阅读 2018-05-24 20:57:33
     一般能想到的就是用textview将文字整体显示出来,然后在使用Android提供的ForegroundColorSpan类对不同颜色的文字进行处理,但实际在开发的时候,发现了以下问题:1、使用ForegroundColorSpan类对第一处的“部分”...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,600
精华内容 41,840
关键字:

android7是什么字体