在 android 4.4 上使用本地字体无效
Using local fonts on android 4.4 is not working
我正在尝试列出所有 available.Everything 的字体似乎在 android Oreo 上工作正常..但是当我在我的选项卡上测试它时它不起作用,尽管 android 团队表示 api 14 及更高版本支持此功能...
<?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="10dp">
<Spinner
android:id="@+id/size_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Spinner>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/amatic_regular"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/amatic_font"
android:gravity="center"
android:text="Amatic"
android:textSize="25sp" />
<RadioButton
android:id="@+id/annie_use_your_telescope"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/annie_use_your_telescope"
android:gravity="center"
android:text="annie telescope"
android:textSize="25sp" />
<RadioButton
android:id="@+id/Windsong"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/windsong"
android:gravity="center"
android:text="Windsong"
android:textSize="25sp" />
<RadioButton
android:id="@+id/cac_champagne"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/cac_champagne"
android:gravity="center"
android:text="Cac champangne"
android:textSize="25sp" />
<RadioButton
android:id="@+id/fff_tsuj"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/fff_tsuj"
android:gravity="center"
android:text="fff ttsu"
android:textSize="25sp" />
<RadioButton
android:id="@+id/cavier_dream_font"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/cavier_dream_font"
android:gravity="center"
android:text="Cavier Font"
android:textSize="25sp" />
<RadioButton
android:id="@+id/roboto_regular"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/roboto_regular"
android:gravity="center"
android:text="Robboto"
android:textSize="25sp" />
<RadioButton
android:id="@+id/SEASRN__"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/seasran__"
android:gravity="center"
android:text="seasrn"
android:textSize="25sp" />
<RadioButton
android:id="@+id/Capture_it"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/capture_it"
android:gravity="center"
android:text="capture it"
android:textSize="25sp" />
<RadioButton
android:id="@+id/OpenSans-Light"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/opensans_regular"
android:gravity="center"
android:text="OpenSans Light"
android:textSize="25sp" />
</RadioGroup>
That's what I get in android Oreo
That's what I get in android kitkat
我不知道你在哪里听说 Android 4.4 及更高版本支持字体资源,但这是错误的。
@font
资源直到 Android Oreo:
才被添加
Android 8.0 (API level 26) introduces a new feature, Fonts in XML, which lets you use fonts as resources. You can add the font file in the res/font/ folder to bundle fonts as resources. These fonts are compiled in your R file and are automatically available in Android Studio. You can access the font resources with the help of a new resource type, font. For example, to access a font resource, use @font/myfont, or R.font.myfont.
之前添加了fontFamily
属性,但受限于available fonts,直到API26才随字体资源发布。在 API 下面的 API 26 中,您必须以编程方式设置自定义字体。
因此,对于 Android 牛轧糖及更低版本,您必须以编程方式进行设置。 @font
资源仅在 Oreo 和更新版本上受支持。
您可以使用如下方式检查当前 API:if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
然后首先使用它加载它,当然还有你的文件名:
Typeface quicksand = Typeface.createFromAsset(c.getAssets(),
"Quicksand-Bold.ttf");
最后,设置它:
someTextview.setTypeface(quicksand);
您仍然可以将属性保留在 XML 文件中。 XML 给定 API 级别上不存在的标签在构建时会被简单地忽略,因此您仍然可以在 API 26 及以上
期间保留它
除非
您使用了支持库。如果你使用支持库,俗称AppCompat1,你可以使用它。例如:
<?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:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"
app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
<font android:fontStyle="italic" android:fontWeight="400" android:font="@font/myfont-Italic"
app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
</font-family>
There's a section in the docs about it 读起来也不错。
你还需要这个依赖(写这个的时候版本是最新的,为了以后使用,你可能要查找最新版本的support lib):
compile "com.android.support:appcompat-v7:27.0.2"
support libraries是出于etc原因的support dependencies的集合,但是AppCompat library是向后兼容的support library,就是这里引用的那个
我正在尝试列出所有 available.Everything 的字体似乎在 android Oreo 上工作正常..但是当我在我的选项卡上测试它时它不起作用,尽管 android 团队表示 api 14 及更高版本支持此功能...
<?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="10dp">
<Spinner
android:id="@+id/size_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</Spinner>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/amatic_regular"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/amatic_font"
android:gravity="center"
android:text="Amatic"
android:textSize="25sp" />
<RadioButton
android:id="@+id/annie_use_your_telescope"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/annie_use_your_telescope"
android:gravity="center"
android:text="annie telescope"
android:textSize="25sp" />
<RadioButton
android:id="@+id/Windsong"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/windsong"
android:gravity="center"
android:text="Windsong"
android:textSize="25sp" />
<RadioButton
android:id="@+id/cac_champagne"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/cac_champagne"
android:gravity="center"
android:text="Cac champangne"
android:textSize="25sp" />
<RadioButton
android:id="@+id/fff_tsuj"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/fff_tsuj"
android:gravity="center"
android:text="fff ttsu"
android:textSize="25sp" />
<RadioButton
android:id="@+id/cavier_dream_font"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/cavier_dream_font"
android:gravity="center"
android:text="Cavier Font"
android:textSize="25sp" />
<RadioButton
android:id="@+id/roboto_regular"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/roboto_regular"
android:gravity="center"
android:text="Robboto"
android:textSize="25sp" />
<RadioButton
android:id="@+id/SEASRN__"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/seasran__"
android:gravity="center"
android:text="seasrn"
android:textSize="25sp" />
<RadioButton
android:id="@+id/Capture_it"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/capture_it"
android:gravity="center"
android:text="capture it"
android:textSize="25sp" />
<RadioButton
android:id="@+id/OpenSans-Light"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:fontFamily="@font/opensans_regular"
android:gravity="center"
android:text="OpenSans Light"
android:textSize="25sp" />
</RadioGroup>
That's what I get in android Oreo
That's what I get in android kitkat
我不知道你在哪里听说 Android 4.4 及更高版本支持字体资源,但这是错误的。
@font
资源直到 Android Oreo:
Android 8.0 (API level 26) introduces a new feature, Fonts in XML, which lets you use fonts as resources. You can add the font file in the res/font/ folder to bundle fonts as resources. These fonts are compiled in your R file and are automatically available in Android Studio. You can access the font resources with the help of a new resource type, font. For example, to access a font resource, use @font/myfont, or R.font.myfont.
之前添加了fontFamily
属性,但受限于available fonts,直到API26才随字体资源发布。在 API 下面的 API 26 中,您必须以编程方式设置自定义字体。
因此,对于 Android 牛轧糖及更低版本,您必须以编程方式进行设置。 @font
资源仅在 Oreo 和更新版本上受支持。
您可以使用如下方式检查当前 API:if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
然后首先使用它加载它,当然还有你的文件名:
Typeface quicksand = Typeface.createFromAsset(c.getAssets(),
"Quicksand-Bold.ttf");
最后,设置它:
someTextview.setTypeface(quicksand);
您仍然可以将属性保留在 XML 文件中。 XML 给定 API 级别上不存在的标签在构建时会被简单地忽略,因此您仍然可以在 API 26 及以上
期间保留它除非
您使用了支持库。如果你使用支持库,俗称AppCompat1,你可以使用它。例如:
<?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:fontStyle="normal" android:fontWeight="400" android:font="@font/myfont-Regular"
app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
<font android:fontStyle="italic" android:fontWeight="400" android:font="@font/myfont-Italic"
app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
</font-family>
There's a section in the docs about it 读起来也不错。
你还需要这个依赖(写这个的时候版本是最新的,为了以后使用,你可能要查找最新版本的support lib):
compile "com.android.support:appcompat-v7:27.0.2"
support libraries是出于etc原因的support dependencies的集合,但是AppCompat library是向后兼容的support library,就是这里引用的那个