Status Update
Comments
ki...@google.com <ki...@google.com>
si...@google.com <si...@google.com>
ru...@gcpsoftware.com <ru...@gcpsoftware.com> #3
Thanks for the report!
e....@gmail.com <e....@gmail.com> #4
The release notes documentation has been edited to clarify this change in behavior for line height.
To support non-standard text sizes, we encourage users to follow the Material design system and use a different style = LocalTextStyle.current.copy(lineHeight = TextUnit.Unspecified)
, or create a custom Typography
entirely.
jh...@themeetgroup.com <jh...@themeetgroup.com> #5
ap...@google.com <ap...@google.com> #6
In my case, I have multiple font sizes in the same Text
(using SpanStyle
in AnnotatedString
). There are legitimate reasons for this. For example, when combining Chinese and English (phonetic) together (for language-learning purposes).
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit 1f602ac9318d4c7368a64af93a5c53f88b795628
Author: Sean McQuillan <seanmcq@google.com>
Date: Wed Jun 29 12:38:11 2022
Move ui-test-font to testutils-fonts
This allows the test fonts to be used by both Compose and non-compose
androidx modules.
Update TypefaceCompat.create tests to use new fonts.
Bug:
Test: ./gradlew cAT test
Change-Id: Ief0d672c9571a13e5471ed03e1f35fb00cc5347f
A testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.kt
M compose/ui/ui-text/build.gradle
A testutils/testutils-fonts/build.gradle
D compose/ui/ui-test-font/api/1.1.0-beta05.txt
M testutils/testutils-fonts/src/commonMain/resources/font/kern_font.ttf
M testutils/testutils-fonts/src/font_ttx/test_400_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_800_italic.ttx
D compose/ui/ui-test-font/api/res-1.0.0-beta07.txt
D compose/ui/ui-test-font/build.gradle
D compose/ui/ui-test-font/api/res-1.1.0-beta03.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_800_regular.ttf
D compose/ui/ui-test-font/api/1.0.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_700_italic.ttf
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta05.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta09.txt
M testutils/testutils-fonts/src/font_ttx/test_400_regular.ttx
M testutils/testutils-fonts/src/font_ttx/test_200_regular.ttx
D compose/ui/ui-test-font/api/restricted_1.0.0-beta05.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta05.txt
M testutils/testutils-fonts/src/font_ttx/test_900_regular.ttx
D compose/ui/ui-test-font/api/res-1.2.0-beta04.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_300_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
D compose/ui/ui-test-font/api/res-1.1.0-beta05.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta05.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta03.txt
M compose/ui/ui/build.gradle
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta07.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
D compose/ui/ui-test-font/api/1.0.0-beta09.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta04.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
D compose/ui/ui-test-font/api/1.2.0-beta01.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta03.txt
M compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/FontTestData.kt
D compose/ui/ui-test-font/api/res-1.2.0-beta02.txt
M testutils/testutils-fonts/src/font_ttx/tall_font.ttx
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta08.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta04.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta02.txt
D compose/ui/ui-test-font/api/1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_600_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_800_italic.ttf
D compose/ui/ui-test-font/api/res-1.0.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_100_regular.ttf
D compose/ui/ui-test-font/api/res-current.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextTestExtensions.kt
D compose/ui/ui-test-font/api/res-1.0.0-beta09.txt
D compose/ui/ui-test-font/api/1.1.0-beta03.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_400_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_200_italic.ttf
D compose/ui/ui-test-font/api/1.0.0-beta10.txt
D compose/ui/ui-test-font/api/1.2.0-beta04.txt
D compose/ui/ui-test-font/api/1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/kern_font.ttx
D compose/ui/ui-test-font/api/current.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta07.txt
M testutils/testutils-fonts/src/font_ttx/sample_font.ttx
M testutils/testutils-fonts/src/font_ttx/test_200_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_300_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_900_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/PaintBoundsTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_400_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt
M testutils/testutils-fonts/src/font_ttx/asset_font.ttx
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta08.txt
M testutils/testutils-fonts/src/font_ttx/test_600_italic.ttx
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/test_800_regular.ttx
D compose/ui/ui-test-font/api/restricted_1.1.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta02.txt
M compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta10.txt
D compose/ui/ui-test-font/api/res-1.1.0-beta02.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_current.txt
M testutils/testutils-fonts/src/commonMain/resources/font/tall_font.ttf
D compose/ui/ui-test-font/api/res-1.1.0-beta04.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_900_italic.ttf
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta01.txt
M core/core/build.gradle
D compose/ui/ui-test-font/api/1.0.0-beta08.txt
D compose/ui/ui-test-font/api/1.2.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta04.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta04.txt
M testutils/testutils-fonts/OWNERS
M testutils/testutils-fonts/src/commonMain/resources/font/sample_font.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingTest.kt
M compose/foundation/foundation/build.gradle
M testutils/testutils-fonts/src/font_ttx/test_500_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_700_regular.ttf
M testutils/testutils-fonts/src/font_ttx/test_100_regular.ttx
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta03.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIntrinsicWidthTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_200_regular.ttf
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidFontResourceLoaderTest.kt
D compose/ui/ui-test-font/api/res-1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/test_100_italic.ttx
M text/text/build.gradle
M testutils/testutils-fonts/src/androidMain/assets/subdirectory/asset_font.ttf
D compose/ui/ui-test-font/api/restricted_current.txt
M testutils/testutils-fonts/src/commonMain/resources/font/sample_font2.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
M core/core/src/androidTest/res/font/weighttestfont.xml
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta03.txt
M testutils/testutils-fonts/src/font_ttx/test_500_italic.ttx
D compose/ui/ui-test-font/api/res-1.0.0-beta10.txt
D compose/ui/ui-test-font/api/1.0.0-beta05.txt
M testutils/testutils-fonts/src/font_ttx/test_700_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_900_italic.ttx
D compose/ui/ui-test-font/api/res-1.2.0-beta01.txt
D compose/ui/ui-test-font/api/res-1.2.0-beta03.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
M testutils/testutils-fonts/src/font_ttx/test_600_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_600_regular.ttf
D compose/ui/ui-test-font/api/1.1.0-beta02.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta09.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta10.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta05.txt
D compose/ui/ui-test-font/api/1.0.0-beta07.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta01.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
M testutils/testutils-fonts/src/androidMain/AndroidManifest.xml
D compose/ui/ui-test-font/api/1.2.0-beta03.txt
M settings.gradle
D compose/ui/ui-test-font/api/1.0.0-beta03.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_500_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_500_regular.ttf
M testutils/testutils-fonts/src/font_ttx/test_700_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_300_italic.ttf
D compose/ui/ui-test-font/api/1.1.0-beta04.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_100_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/invalid_font.ttf
M docs-tip-of-tree/build.gradle
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta04.txt
M compose/ui/ui-inspection/build.gradle
D compose/ui/ui-test-font/api/res-1.0.0-beta08.txt
M testutils/testutils-fonts/src/font_ttx/test_300_italic.ttx
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 76a0566121b58e1d9722352ac1e70e35dd1098fe
Author: Sean McQuillan <seanmcq@google.com>
Date: Tue Mar 29 15:07:23 2022
TypefaceCompat create falls back to Typeface.create
On API 14-20 fall back to platform Typeface.create if compat impl cannot
resolve.
Also remove extra logging from TypefaceCompat.create path.
Test: ./gradlew :core;core:cAT
Bug:
Relnote: "TypefaceCompate.create(..., weight, italic) will fallback to
platform Typeface.create when compat impl cannot resolve on API 14-20"
Change-Id: I1ee34c7e38fc36174151d88d363adaee4371cb51
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatBaseImpl.java
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi21.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi26.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi14.java
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 553679730518b7cf295642500603b4adb90191d3
Author: Eugen Pechanec <e.pechanec@gmail.com>
Date: Sun Mar 28 13:56:43 2021
Backport Typeface.create(Typeface, int weight, boolean italic)
API 28+ uses public API.
API 26-27 uses existing private JNI method.
API 21-25 does this in two steps, first create Typeface with matching
italics, then adjust weight, both using existing private JNI methods.
API < 19 leverages the fact that the only place a Typeface family with
multiple weights could come from is TypefaceCompat.
All implementations use a small cache that mimics the one on API 28.
Fallback to API < 19 implementation, if new private API isn't available,
or return unaltered input, if that fails.
Typeface#isBold works on API 26+ (same as public API) so that any font
with *requested* weight 600+ is bold. This is not possible to mimic
on API 21+ without diverging from intended font weight resolution path.
On API < 21 (loading font from temp file) setting style is impossible.
Relnote: Backported `Typeface#create(Typeface, int, boolean)` which allows creating typeface with specific weight from a font family
Test: Run TypefaceCompatTest#testTypeFaceCompatCreateWithExactStyle
BUG: 145311058
Change-Id: I342dc928edd1e8e5dbc018ca5375cceb047425e5
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatBaseImpl.java
A core/core/src/androidTest/res/font/weighttestfont.xml
M core/core/api/public_plus_experimental_current.txt
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java
M core/core/api/current.txt
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi26.java
M core/core/api/restricted_current.txt
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi21.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi14.java
e....@gmail.com <e....@gmail.com> #10
This can be closed now
xa...@gmail.com <xa...@gmail.com> #11
TypefaceCompat.create was backported
but TextView textFontWeight attribute seams not
why?
Description
Motivation:
With android:textFontWeight backported (backed by the above-mentioned method) we could use text appearances with different weights - by referencing font family and weight - since API 16 (?) in AppCompatTextView.
This is currently only possible since API 28.
Another potential use is a future TypeAppearanceSpanCompat.
Example:
res/font/raleway.xml
<font-family xmlns:app="
<font
app:font="@font/raleway_thin"
app:fontStyle="normal"
app:fontWeight="100" />
<font
app:font="@font/raleway_thin_italic"
app:fontStyle="italic"
app:fontWeight="100" />
<font
app:font="@font/raleway_regular"
app:fontStyle="normal"
app:fontWeight="400" />
</font-family>
res/values/styles.xml
<resources>
<style name="TextAppearance.Raleway.Regular" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">400</item>
<item name="textFontWeight">400</item>
</style>
<style name="TextAppearance.Raleway.Thin" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">100</item>
<item name="textFontWeight">100</item>
</style>
<style name="TextAppearance.Raleway.Thin.Italic" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">100</item>
<item name="textFontWeight">100</item>
<item name="android:textStyle">italic</item>
</style>
</resources>
Example implementation:
On API 26-27 we could re-implement Typeface.create mentioned above as the backing JNI method already exists.
See
On API 21-25 we'd need to first create a Typeface with matching italic (using the Typeface.create with style API) and then use the JNI method to create weight alias.
See
On API 20 and below we could leverage the fact that the only place weight typefaces could come from are from ResourcesCompat.getFont so we use TypefaceCompat internals to find the font family and look for best match in Java.
See