Last active
October 31, 2025 12:10
-
-
Save sunmeat/9ef5be735a5f9878aca1fd595087e682 to your computer and use it in GitHub Desktop.
fonts android example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| MainActivity.java: | |
| package site.sunmeat.fonts; | |
| import android.graphics.Typeface; | |
| import android.os.*; | |
| import androidx.appcompat.app.AppCompatActivity; | |
| import androidx.core.content.res.ResourcesCompat; | |
| import androidx.core.provider.*; | |
| import android.widget.TextView; | |
| public class MainActivity extends AppCompatActivity { | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| setContentView(R.layout.activity_main); | |
| TextView tvGoogleFont = findViewById(R.id.tvGoogleFont); | |
| TextView tvLocalFont = findViewById(R.id.tvLocalFont); | |
| // локальний шрифт з ресурсів (синхронно) | |
| Typeface localTypeface = ResourcesCompat.getFont(this, R.font.holos); | |
| if (localTypeface != null) { | |
| tvLocalFont.setTypeface(localTypeface); | |
| } else { | |
| tvLocalFont.setTypeface(Typeface.DEFAULT); | |
| } | |
| // google font програмно | |
| loadGoogleFont(tvGoogleFont); | |
| } | |
| private void loadGoogleFont(TextView textView) { | |
| FontRequest fontRequest = new FontRequest( | |
| "com.google.android.gms.fonts", // authority (провайдер Google) | |
| "com.google.android.gms", // package | |
| "Noto Serif", // query (назва шрифту, напр. "Roboto", "Noto Serif") | |
| R.array.com_google_android_gms_fonts_certs // cертифікати для перевірки | |
| ); | |
| // обробкa результату | |
| var callback = new FontsContractCompat.FontRequestCallback() { | |
| @Override | |
| public void onTypefaceRetrieved(Typeface typeface) { | |
| // успіх | |
| if (typeface != null) { | |
| textView.setTypeface(typeface); | |
| } | |
| } | |
| @Override | |
| public void onTypefaceRequestFailed(int failureReason) { | |
| // помилка | |
| textView.setTypeface(Typeface.DEFAULT); | |
| } | |
| }; | |
| // запитуємо шрифт (асинхронно, на головному потоці) | |
| FontsContractCompat.requestFont(this, fontRequest, callback, | |
| new Handler(Looper.getMainLooper())); | |
| } | |
| } | |
| ==================================================================================================================== | |
| activity_main.xml: | |
| <?xml version="1.0" encoding="utf-8"?> | |
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
| android:layout_width="match_parent" | |
| android:layout_height="match_parent" | |
| android:orientation="vertical" | |
| android:padding="16dp"> | |
| <TextView | |
| android:id="@+id/tvGoogleFont" | |
| android:layout_width="match_parent" | |
| android:layout_height="wrap_content" | |
| android:layout_marginBottom="32dp" | |
| android:text="Текст з Google Fonts (Noto Serif)" | |
| android:textSize="24sp" /> | |
| <TextView | |
| android:id="@+id/tvLocalFont" | |
| android:layout_width="match_parent" | |
| android:layout_height="wrap_content" | |
| android:text="Текст з локального ресурсу" | |
| android:textSize="36sp" /> | |
| </LinearLayout> | |
| ==================================================================================================================== | |
| res / values / strings.xml: | |
| <resources> | |
| <string name="app_name">Fonts Example</string> | |
| <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> | |
| 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-array> | |
| <string-array name="com_google_android_gms_fonts_certs_prod"> | |
| <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> | |
| </string-array> | |
| </resources> | |
| ==================================================================================================================== | |
| res / font / holos.ttf | |
| треба завантажити файл, створити папку fonts, додати в неї файл шрифту | |
| ==================================================================================================================== | |
| про всяк випадок (мені не знадобилося): | |
| <uses-permission android:name="android.permission.INTERNET" /> | |
| implementation 'androidx.core:core:1.12.0' // FontsContractCompat |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment