Are you over 18 and want to see adult content?
More Annotations
![A complete backup of worldwidewives.com](https://www.archivebay.com/archive5/images/dd9d0121-3273-4ee9-b6ce-3517c2ecbe5c.png)
A complete backup of worldwidewives.com
Are you over 18 and want to see adult content?
![A complete backup of www.neatmovies.com](https://www.archivebay.com/archive5/images/df0ca641-a35a-45c7-ba9d-3e6ad5e57a5b.png)
A complete backup of www.neatmovies.com
Are you over 18 and want to see adult content?
![A complete backup of www.kaufmich.com](https://www.archivebay.com/archive5/images/613963e4-92b4-4a47-8df2-1e68a18c3394.png)
A complete backup of www.kaufmich.com
Are you over 18 and want to see adult content?
![A complete backup of www.lushstories.com](https://www.archivebay.com/archive5/images/46349d88-412d-4ce1-a2c9-0e69e76b3133.png)
A complete backup of www.lushstories.com
Are you over 18 and want to see adult content?
![A complete backup of www.model-kartei.de](https://www.archivebay.com/archive5/images/a20fcd60-52ba-41dc-b342-71b94e9f6363.png)
A complete backup of www.model-kartei.de
Are you over 18 and want to see adult content?
Favourite Annotations
![A complete backup of suebryceeducation.com](https://www.archivebay.com/archive5/images/f1a27b62-3296-48d9-b2e9-07292f8e4304.png)
A complete backup of suebryceeducation.com
Are you over 18 and want to see adult content?
![A complete backup of ahaparenting.com](https://www.archivebay.com/archive5/images/633909d9-e9ee-43fa-b29d-4b2642d7d80a.png)
A complete backup of ahaparenting.com
Are you over 18 and want to see adult content?
![A complete backup of claremontestates.co.uk](https://www.archivebay.com/archive5/images/3a694e4f-b5a7-4cc0-8a90-c6dd46ac24ba.png)
A complete backup of claremontestates.co.uk
Are you over 18 and want to see adult content?
![A complete backup of jamesmorrisonmusic.com](https://www.archivebay.com/archive5/images/896a39ee-a3c0-4e0d-967c-bd924f53d440.png)
A complete backup of jamesmorrisonmusic.com
Are you over 18 and want to see adult content?
![A complete backup of fox-sportauspuff.de](https://www.archivebay.com/archive5/images/15fd51ae-261c-4c9e-b7f1-ef98a0547c6b.png)
A complete backup of fox-sportauspuff.de
Are you over 18 and want to see adult content?
![A complete backup of dysautonomiainternational.org](https://www.archivebay.com/archive5/images/5d307f29-6a92-481d-84c9-f5ff5dd331f8.png)
A complete backup of dysautonomiainternational.org
Are you over 18 and want to see adult content?
Text
COMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the Material ACTIVITY RESULT CONTRACTANDROID O: FONTS
Font support within Android has long been a pain point for many of us. To deviate from the standard system fonts has required the use of third-party libraries (such as Chris Jenkins’ Calligraphy or Lisa Wray’s fontbinding), or by having to subclass TextView in order to add custom font support. While both Chris & Lisa’s libraries (and any others I may have missed) do an excellent job ofRENDEREFFECT
JUNIT 5: GETTING STARTED One of the first major differences with JUnit 5 is that it consists of a number of discrete components. JUnit Platform is a foundation layer which enables different testing frameworks to be launched on the JVM.Junit Jupiter is a TestEngine implementation which encapsulates the programming and extension models which define JUnit 5 tests – in other words it is the JUnit 5 test framework RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java GRADLE: VERSION CATALOGSCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the Material ACTIVITY RESULT CONTRACTANDROID O: FONTS
Font support within Android has long been a pain point for many of us. To deviate from the standard system fonts has required the use of third-party libraries (such as Chris Jenkins’ Calligraphy or Lisa Wray’s fontbinding), or by having to subclass TextView in order to add custom font support. While both Chris & Lisa’s libraries (and any others I may have missed) do an excellent job ofRENDEREFFECT
JUNIT 5: GETTING STARTED One of the first major differences with JUnit 5 is that it consists of a number of discrete components. JUnit Platform is a foundation layer which enables different testing frameworks to be launched on the JVM.Junit Jupiter is a TestEngine implementation which encapsulates the programming and extension models which define JUnit 5 tests – in other words it is the JUnit 5 test framework RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java COMPOSE: LIST / DETAIL The individual tests use the TestUI() function to construct the UI and then assert that it is as expected given the inputs. Both the small screen and large screen tests assert that the root view has the correct number of children. TwoPageLayout will have a single child, the list.SplitLayout will have two children the list and detail.. The asymmetric fold test verifies that the split positionSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. JUNIT 5: GETTING STARTED One of the first major differences with JUnit 5 is that it consists of a number of discrete components. JUnit Platform is a foundation layer which enables different testing frameworks to be launched on the JVM.Junit Jupiter is a TestEngine implementation which encapsulates the programming and extension models which define JUnit 5 tests – in other words it is the JUnit 5 test frameworkSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
MOTIONLAYOUT
The app:constraintSetStart and app:constraintSetEnd attributes are references to the two ConstrainSets defining the expanded and collapsed states.The OnSwipe element binds this transition to the user dragging on the RecyclerView in the main layout file that we looked at earlier. In the expanded and collapsed states, the top edge of the RecyclerView is at a different location because it isJUNIT 5: KOTLIN
JUnit 5 was formally released in July 2016 and is quite a major evolution to JUnit 4 which has been the standard unit testing framework since Android first appeared on the scene. There are some quite significant changes and getting things set up, and then getting the best out of JUnit 5 can require aRENDEREFFECT
1. val blurEffect = RenderEffect.createBlurEffect(x, y, Shader.TileMode.MIRROR) The first two arguments specify the amount of blur in the horizontal and vertical planes respectively. The larger the value, the stronger the blur effect will be. The third argumentspecifies how the
ANIMATEDSTATELISTDRAWABLE The first is to animate the trim path end of the tick which will give the illusion that the tick is being drawn. An explanation of trim path animations can be found here. The second animation will animate the circle colour from grey to green. The second AnimatedVectorDrawable to transition from the checked to the unchecked state is: KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a JavaKOTLIN: MUTABILITY
Kotlin is a very rich language with much subtlety tucked away. In this occasional series (meaning that there will be occasional, standalone posts covering distinct areas) we’ll explore some of these subtleties. In this post we’ll take a look at mutability. Mutability is a core concept in Kotlin, but all is perhaps not what itSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
MOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a JavaSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
MOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java COMPOSE - LIST / DETAIL: FOLDABLES - STYLING ANDROID Previously we saw how we can get implement a split or two-page layout. Then how we can dynamically apply them based on the screen width. While that achieved the basic list /detail UI it doesn’t do as much as we get from SlidingPaneLayout which also supports foldables. Specifically, it can align the split point with the hinge or fold lineof the device.
ANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X libraryJETPACK COMPOSE
Jetpack Compose was first announced by Google at I/O 2019. For those that don’t know, Compose is a declarative UI framework. It will replace the traditional View-based system that has been part of Android since the beginning. In this post, I’ll explain why there hasn’t been any Compose content on Styling Android up to now. CONSTRAINTLAYOUT: SIZED ALIGN ConstraintLayout is an extremely powerful thing, but is also somewhat complex because it has a number of different ways of working. For a while I struggled with one specific use-case which I felt must be possible, but could never quite get working as I wanted, and often had to go with a solution which felt slightly hacky.ANDROID O: FONTS
Font support within Android has long been a pain point for many of us. To deviate from the standard system fonts has required the use of third-party libraries (such as Chris Jenkins’ Calligraphy or Lisa Wray’s fontbinding), or by having to subclass TextView in order to add custom font support. While both Chris & Lisa’s libraries (and any others I may have missed) do an excellent job ofGRADIENT TEXT
Recently there was a comment on the article on Text Shadows asking how to fill text with a gradient. In this article we’ll look at a simple technique for doing precisely that. Creating text filled with a gradient is actually really easy, although it’s not immediately obvious how to do it in the same was MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in ANDROID 11: WINDOWINSETS Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a newLAYOUT WEIGHTS
android:layout_weight = "1" />. . Both of these will produce the same result: Biased split. Hang on a second. While we’re certainly seeing a two thirds split, we actually gave the red layout a higher weight than the green, so we’d expect the red to take up two thirds of theavailable space.
ANIMATEDSTATELISTDRAWABLE The parent element is animated-selector and the two item elements are almost identical to those in the legacy state list drawable, with the addition of a unique id for each. Each of the transition elements declare the start and end states, and the drawable which will be used for this transition. It will probably not come as too much of a surprise to learn that these drawables are actuallySTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
MOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a JavaSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
MOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java COMPOSE - LIST / DETAIL: FOLDABLES - STYLING ANDROID Previously we saw how we can get implement a split or two-page layout. Then how we can dynamically apply them based on the screen width. While that achieved the basic list /detail UI it doesn’t do as much as we get from SlidingPaneLayout which also supports foldables. Specifically, it can align the split point with the hinge or fold lineof the device.
ANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X libraryJETPACK COMPOSE
Jetpack Compose was first announced by Google at I/O 2019. For those that don’t know, Compose is a declarative UI framework. It will replace the traditional View-based system that has been part of Android since the beginning. In this post, I’ll explain why there hasn’t been any Compose content on Styling Android up to now. CONSTRAINTLAYOUT: SIZED ALIGN ConstraintLayout is an extremely powerful thing, but is also somewhat complex because it has a number of different ways of working. For a while I struggled with one specific use-case which I felt must be possible, but could never quite get working as I wanted, and often had to go with a solution which felt slightly hacky.ANDROID O: FONTS
Font support within Android has long been a pain point for many of us. To deviate from the standard system fonts has required the use of third-party libraries (such as Chris Jenkins’ Calligraphy or Lisa Wray’s fontbinding), or by having to subclass TextView in order to add custom font support. While both Chris & Lisa’s libraries (and any others I may have missed) do an excellent job ofGRADIENT TEXT
Recently there was a comment on the article on Text Shadows asking how to fill text with a gradient. In this article we’ll look at a simple technique for doing precisely that. Creating text filled with a gradient is actually really easy, although it’s not immediately obvious how to do it in the same was MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in ANDROID 11: WINDOWINSETS Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a newLAYOUT WEIGHTS
android:layout_weight = "1" />. . Both of these will produce the same result: Biased split. Hang on a second. While we’re certainly seeing a two thirds split, we actually gave the red layout a higher weight than the green, so we’d expect the red to take up two thirds of theavailable space.
ANIMATEDSTATELISTDRAWABLE The parent element is animated-selector and the two item elements are almost identical to those in the legacy state list drawable, with the addition of a unique id for each. Each of the transition elements declare the start and end states, and the drawable which will be used for this transition. It will probably not come as too much of a surprise to learn that these drawables are actually GRADLE: VERSION CATALOGSSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified inCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java GRADLE: VERSION CATALOGSSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified inCOMPOUND DRAWABLES
I recently learned about a small feature in Android which has been there since API level 1 (the variant that we’ll use has been in there since API 3, but others appeared in API 1): Compound Drawables. In this article we’ll have a look at what they are and see how wecan use them
NUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ACTIVITY RESULT CONTRACT RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns when PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID into KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a Java COMPOSE - LIST / DETAIL: FOLDABLES - STYLING ANDROID Previously we saw how we can get implement a split or two-page layout. Then how we can dynamically apply them based on the screen width. While that achieved the basic list /detail UI it doesn’t do as much as we get from SlidingPaneLayout which also supports foldables. Specifically, it can align the split point with the hinge or fold lineof the device.
ANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X library ACTIVITY RESULT CONTRACT The registerForActivityResult () function takes two arguments. The first is the contract, and the second is a lambda which will be invoked on completion. The output type of the contract dictates the argument type of the lambda. In this example, it is a boolean that KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a JavaSLIDINGPANELAYOUT
The primary use-case for SlidingPaneLayout is where different screen sizes require different UX. The classic example of this is a List / Detail interface. The list and detail panes are shown side-by-side on larger displays. But the list pane is shown full screen on smaller displays. Clicking on a list item then shows the detail pane fullscreen.
LAYOUT WEIGHTS
android:layout_weight = "1" />. . Both of these will produce the same result: Biased split. Hang on a second. While we’re certainly seeing a two thirds split, we actually gave the red layout a higher weight than the green, so we’d expect the red to take up two thirds of theavailable space.
IRREGULAR SHAPES
Now comes the clever bit: We’re not interested in all of this oval, we only want the bit that covers the left hand side of the image. So we need to crop the oval, and we do this using the Region that we created earlier. A Region simply represents a rectangular area. We’re going to combine the Path object (which is the rotated oval) with a Region which covers the left side of the Canvas ANDROID 11: WINDOWINSETS Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a newGRADIENT TEXT
Recently there was a comment on the article on Text Shadows asking how to fill text with a gradient. In this article we’ll look at a simple technique for doing precisely that. Creating text filled with a gradient is actually really easy, although it’s not immediately obvious how to do it in the same was RECYCLERVIEW ANIMATIONS RecyclerView is a really useful way of displaying content in list form, particularly when the content is dynamic and / or there are large numbers of items. One thing that can be really useful is that we get some really nice animations for free provided we implement our Adapter correctly. For those that have converted from ListView there is a tendency to follow the same usage patterns whenSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X library MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in ANIMATEDSTATELISTDRAWABLE The first is to animate the trim path end of the tick which will give the illusion that the tick is being drawn. An explanation of trim path animations can be found here. The second animation will animate the circle colour from grey to green. The second AnimatedVectorDrawable to transition from the checked to the unchecked state is:KOTLIN: MUTABILITY
Kotlin is a very rich language with much subtlety tucked away. In this occasional series (meaning that there will be occasional, standalone posts covering distinct areas) we’ll explore some of these subtleties. In this post we’ll take a look at mutability. Mutability is a core concept in Kotlin, but all is perhaps not what it BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Biometrics – BiometricPrompt. Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced inMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
VECTORDRAWABLE FILL WINDINGS The ordering of the points means that we’re drawing the circle in a counter-clockwise direction and this drawing direction is important for the second fill rule: the non-zero rule. For this we take the same approach of drawing an imaginary line to the edge of a canvas with a counter set to zero and each time we cross a path from left-to-right relative to our imaginary line we decrement our PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID intoSTYLING ANDROID
In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. GRADLE: VERSION CATALOGSANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X library MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in ANIMATEDSTATELISTDRAWABLE The first is to animate the trim path end of the tick which will give the illusion that the tick is being drawn. An explanation of trim path animations can be found here. The second animation will animate the circle colour from grey to green. The second AnimatedVectorDrawable to transition from the checked to the unchecked state is:KOTLIN: MUTABILITY
Kotlin is a very rich language with much subtlety tucked away. In this occasional series (meaning that there will be occasional, standalone posts covering distinct areas) we’ll explore some of these subtleties. In this post we’ll take a look at mutability. Mutability is a core concept in Kotlin, but all is perhaps not what it BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Biometrics – BiometricPrompt. Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced inMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
VECTORDRAWABLE FILL WINDINGS The ordering of the points means that we’re drawing the circle in a counter-clockwise direction and this drawing direction is important for the second fill rule: the non-zero rule. For this we take the same approach of drawing an imaginary line to the edge of a canvas with a counter set to zero and each time we cross a path from left-to-right relative to our imaginary line we decrement our PACKAGE NAME VS. APPLICATION ID The package name controls much of what occurs during the build, but the application ID only gets applied right at the very end. For proof of this, take a look here, specifically the final note which states: Although you may have a different name for the manifest package and the Gradle applicationId, the build tools copy the application ID intoNUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the MaterialCOMPOUND DRAWABLES
Before we start, a little background: Recently I was working on a project where one of my layouts contained typical “icon” configuration (consisting of a graphic with a text label below it), quite similar to what we used in the article on Intelligent Layouts.My layout worked perfectly well, but I updated to ADT 16 and the new Lint tool gave me a warning which I didn’t understand: This JUNIT 5: GETTING STARTED One of the first major differences with JUnit 5 is that it consists of a number of discrete components. JUnit Platform is a foundation layer which enables different testing frameworks to be launched on the JVM.Junit Jupiter is a TestEngine implementation which encapsulates the programming and extension models which define JUnit 5 tests – in other words it is the JUnit 5 test framework ANDROID 11: WINDOWINSETS Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a newIRREGULAR SHAPES
Now comes the clever bit: We’re not interested in all of this oval, we only want the bit that covers the left hand side of the image. So we need to crop the oval, and we do this using the Region that we created earlier. A Region simply represents a rectangular area. We’re going to combine the Path object (which is the rotated oval) with a Region which covers the left side of the Canvas ELLIPTICAL VECTOR GRADIENTS The reason for this may seem obvious to those familiar with RadialGradient in Android which is used when rendering gradients directly to a Canvas, and is the basis for the radial gradient in VectorDrawable. RadialGradient only permits us to specify a single value as the radius of the gradient meaning that it will only render circular gradients.. At first glance this may appear to be fairly BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Biometrics – BiometricPrompt. Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced in VIEW BINDING: INTERNALS View Binding works in similar way to Data Binding and, in fact, is done as part of the Data Binding processor during the build. Whereas Data Binding needs to be explicitly enabled for each XML layout file, View Binding, once enabled, is done for every layout that is not explicitly disabled. It generates a binding class for each XML layout.TEXT SHADOWS
Often tools like Photoshop are used to create graphic elements which are actually text with various effects applied to them, and an well used effect in such elements is the use of shadows. Android supports text shadows, and in this article we’ll explore a number of KOTLIN: CONTEXTS & SHAREDPREFERENCES The bindSharedPreference () function is the only externally visible function. It is here that we perform the type checking and pass in function references for the getter and setter according to the type that is determined from the default value. SharedPreferenceDelegateSTYLING ANDROID
Jetpack Compose was first announced by Google at I/O 2019. For those that don’t know, Compose is a declarative UI framework. It will replace the traditional View-based system that has been part of Android since the beginning. GRADLE: VERSION CATALOGS In April 2021 Gradle V7.0 was released. It introduces a new experimental feature called version catalogs. These can make life easier when we need to maintain consistent dependency versions in multi-module projects. In this post, we’ll take a look at this new feature, and how it can make life easier. Regular readers of StylingAndroid
ANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X library MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced in Pie to replacethis. Let’s begin
ANIMATEDSTATELISTDRAWABLE The parent element is animated-selector and the two item elements are almost identical to those in the legacy state list drawable, with the addition of a unique id for each. Each of the transition elements declare the start and end states, and the drawable which will be used for this transition. It will probably not come as too much of a surprise to learn that these drawables are actuallyMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
KOTLIN: MUTABILITY
Kotlin is a very rich language with much subtlety tucked away. In this occasional series (meaning that there will be occasional, standalone posts covering distinct areas) we’ll explore some of these subtleties. In this post we’ll take a look at mutability. Mutability is a core concept in Kotlin, but all is perhaps not what it VECTORDRAWABLE FILL WINDINGS The ordering of the points means that we’re drawing the circle in a counter-clockwise direction and this drawing direction is important for the second fill rule: the non-zero rule. For this we take the same approach of drawing an imaginary line to the edge of a canvas with a counter set to zero and each time we cross a path from left-to-right relative to our imaginary line we decrement our PACKAGE NAME VS. APPLICATION ID There should be nothing here that should be surprising to the vast majority of Android developers, but from here on it is important to understand the difference between the Package Name – which gets declared up-front in the base Manifest; and the application ID – which gets declared in our build.gradle.The package name controls much of what occurs during the build, but the application IDSTYLING ANDROID
Jetpack Compose was first announced by Google at I/O 2019. For those that don’t know, Compose is a declarative UI framework. It will replace the traditional View-based system that has been part of Android since the beginning. GRADLE: VERSION CATALOGS In April 2021 Gradle V7.0 was released. It introduces a new experimental feature called version catalogs. These can make life easier when we need to maintain consistent dependency versions in multi-module projects. In this post, we’ll take a look at this new feature, and how it can make life easier. Regular readers of StylingAndroid
ANIMATABLE2: PART 2
Correctly determining whether to use Animatable2 or Animatable2Compat can be more complex than it may appear. Previously we looked at some of the complexities of using Animatable2 or Animatable2Compat to register for animation callbacks. This is because Animatable2 only appeared in API 23 and later AnimatedVectorDrawableCompat caters for earlier versions. Also, the Android X library MATERIAL SHAPE: SHAPEAPPEARANCE We’ll look at the contents of the style definitions in a moment, but what we have here does an awful lot for us. Whenever one of the Material components that falls in to the ‘small’ size bucket is inflated, it will look up the value of shapeAppearanceSmallComponent from the theme and use that to define the shape of the view. That is unless the shapeAppearance is explicitly specified in BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced in Pie to replacethis. Let’s begin
ANIMATEDSTATELISTDRAWABLE The parent element is animated-selector and the two item elements are almost identical to those in the legacy state list drawable, with the addition of a unique id for each. Each of the transition elements declare the start and end states, and the drawable which will be used for this transition. It will probably not come as too much of a surprise to learn that these drawables are actuallyMOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
KOTLIN: MUTABILITY
Kotlin is a very rich language with much subtlety tucked away. In this occasional series (meaning that there will be occasional, standalone posts covering distinct areas) we’ll explore some of these subtleties. In this post we’ll take a look at mutability. Mutability is a core concept in Kotlin, but all is perhaps not what it VECTORDRAWABLE FILL WINDINGS The ordering of the points means that we’re drawing the circle in a counter-clockwise direction and this drawing direction is important for the second fill rule: the non-zero rule. For this we take the same approach of drawing an imaginary line to the edge of a canvas with a counter set to zero and each time we cross a path from left-to-right relative to our imaginary line we decrement our PACKAGE NAME VS. APPLICATION ID There should be nothing here that should be surprising to the vast majority of Android developers, but from here on it is important to understand the difference between the Package Name – which gets declared up-front in the base Manifest; and the application ID – which gets declared in our build.gradle.The package name controls much of what occurs during the build, but the application ID COMPOSE - LIST / DETAIL: FOLDABLES - STYLING ANDROID In a recent post on Styling Android we looked SlidingPanelLayout. This can simplify the implementation of a List / Detail UI. It handles the logic of whether to show a side-by-side layout or a two-page layout depending on the screen size. Currently, there is no equivalent for this in Jetpack Compose. In this article, we’llNUMBERPICKER
A NumberPicker is a control for selecting a number from a limited range. It is used within TimePicker but is also a standalone widget in its own right. There are various forms of rendering it which depend on the theme of your app. I’ll focus on the Material-themed variant (shown on the left) which will be used if your app’s theme derives from R.style.Theme_Material (which the Material JUNIT 5: GETTING STARTED One of the first major differences with JUnit 5 is that it consists of a number of discrete components. JUnit Platform is a foundation layer which enables different testing frameworks to be launched on the JVM.Junit Jupiter is a TestEngine implementation which encapsulates the programming and extension models which define JUnit 5 tests – in other words it is the JUnit 5 test framework VIEW BINDING: INTERNALS In September 2019 Google released Android Studio 3.6 Canary 11 to the Canary channel. This had an interesting new addition: View Binding. In this short series we’ll take a look at how it works, and what impact it may have on performance. Often we BIOMETRICS - BIOMETRICPROMPT - STYLING ANDROID Android has supported fingerprint sensors since API 23 and we previously covered the APIs for handling user authentication on Styling Android. However the FingerprintManager class which those tutorials rely upon were deprecated in API 28 (Pie). In this series we’ll look at the new APIs which were introduced in Pie to replacethis. Let’s begin
MOTIONLAYOUT
At Google IO 2018 ConstraintLayout 2.0 was announced and the biggest new addition was MotionLayout which gives us an amazing new tool for layout animations. Nicolas Roard has already published an excellent introduction to MotionLayout and I would highly recommend giving that a read to understand the basics and components of MotionLayout. Inthis short
ANDROID 11: WINDOWINSETS Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a newTEXT SHADOWS
Often tools like Photoshop are used to create graphic elements which are actually text with various effects applied to them, and an well used effect in such elements is the use of shadows. Android supports text shadows, and in this article we’ll explore a number of KOTLIN: CONTEXTS & SHAREDPREFERENCES Before we begin, I should point out that this isn’t going to be a full explanation of how all of the code works. Please refer to the original series for a full explanation of the code.. The first area worthy of discussion is where we obtain a Context which will store data to device encrypted storage, permitting our app to access it before the user has logged in to the device. KOTLIN: SERIALIZABLE OBJECTS Implementing the Serializable interface on SealedClass is all we need to do in order to serialise this class hierarchy. While this appears to work it actually breaks the singleton implementation of Object and Object2 and using objects that have been serialised. The reason for this is that the Java serialiser has absolutely no knowledge of a Kotlin object or even that this is actually a JavaSkip to content
__
STYLING ANDROID
A technical guide to improving the UI and UX of Android apps__
* About
* License Information* Privacy Policy
Search for:
MATERIAL SHAPE: CUTTING CORNERS __May 29, 2020May 29, 2020__Mark
Allison __No comment One of the foundations of Material Design 2.0 is the ability to define shapes to reinforce the branding being applied to our apps. At first glance what we are able to control appears to be somewhat limited, but in this series we’ll go deeper down the rabbit hole to explore some of the more subtle…Continue Reading__
MATERIAL SHAPE: LIVING ON THE EDGE __May 22, 2020May 8, 2020__Mark Allison
__No comment
One of the foundations of Material Design 2.0 is the ability to define shapes to reinforce the branding being applied to our apps. At first glance what we are able to control appears to be somewhat limited, but in this series we’ll go deeper down the rabbit hole to explore some of the more subtle…Continue Reading__
MATERIAL SHAPE: GOTCHAS __May 15, 2020May 8, 2020__Mark
Allison __No comment One of the foundations of Material Design 2.0 is the ability to define shapes to reinforce the branding being applied to our apps. At first glance what we are able to control appears to be somewhat limited, but in this short series we’ll go deeper down the rabbit hole to exploresome of the more…
Continue Reading__
MATERIAL SHAPE: SHAPEAPPEARANCE __May 8, 2020May 2, 2020__Mark
Allison __1 Comment
One of the foundations of Material Design 2.0 is the ability to define shapes to reinforce the branding being applied to our apps. At first glance what we are able to control appears to be somewhat limited, but in this short series we’ll go deeper down the rabbit hole to exploresome of the more…
Continue Reading__
ANIMATEDICONS: SHARE __May 1, 2020April 20, 2020__Mark Allison
__No comment
There is a nice micro-animation library at useanimations.com which contains some useful animations which are particularly well suited for animated icons. These are all free to use and downloadable at Lottie animations. For those that already use Lottie they can use these animations as-is. However using them is apps which don’t use Lottie, or in cases where…Continue Reading__
ASYNCANDROID: INTRODUCTION TO RENDERSCRIPT __April 24, 2020April 24, 2020__Mark
Allison __2 Comments I released a video for the AsyncAndroid 2020 and this article contains some additional information on the subject matter of that video. I would strongly suggest that you give it a watch first. There’s also some great content from other folks, so please drop by – it’s allfree content.
Continue Reading__
CONSTRAINTLAYOUT: SIZED ALIGN __April 17, 2020April 10, 2020__Mark
Allison __No comment ConstraintLayout is an extremely powerful thing, but is also somewhat complex because it has a number of different ways of working. For a while I struggled with one specific use-case which I felt must be possible, but could never quite get working as I wanted, and often had to go with a solution which felt…Continue Reading__
D8 DESUGARING
__April 10, 2020April 8, 2020__Mark Allison
__1 Comment
D8 replaced DX as the default dex compiler in Android Studio (and Android Gradle Plugin) 3.1. It runs faster than DX and produces smaller .dex files, but it’s also capable of some other nice stuff. In this post we’ll look at one of these: desugaring. We’ll explain what that is and what benefits it can…Continue Reading__
ANIMATEDICONS: MAIL
__April 3, 2020March 29, 2020__Mark Allison
__No comment
There is a nice micro-animation library at useanimations.com which contains some useful animations which are particularly well suited for animated icons. These are all free to use and downloadable at Lottie animations. For those that already use Lottie they can use these animations as-is. However using them is apps which don’t use Lottie, or in cases where…Continue Reading__
ANDROID 11: WINDOWINSETS __March 27, 2020March 29, 2020__Mark
Allison __No comment Getting Window Insets working correctly can be tricky. It’s a subject that we’ve looked at before on Styling Android and we covered some of the complexity involved in that article. With the release of the developer previews of Android 11 there is a new API available for handling Window Insets and they are good! In…Continue Reading__
POSTS NAVIGATION
Page 1 Page 2 … Page 48Next__
CATEGORIES
Categories Select Category ActionBar (24) ActionMode (4) Adapter (8) ArrayAdapter (6) CursorAdapter (1) PagerAdapter (1) SimpleAdapter (1) AlarmManager (5) Android O (8) Adaptive Icons (1) Fonts (5) Android Q (5) Android Studio (2) Android Things (4) Android Wear (15) Data API (3) MobileCompanion (4) WatchFace (6) AnimatedIcons (13) Animation (69) AnimatedStateListDrawable (3) Animation Set (7) AnimationListener (3) Interpolator (3) StateListAnimator (1) Transition (10) Scene (2) Translate (4) App Widget (9) Lockscreen (6) RemoteViews (3) AppBar (4) Architecture (11) Architecture Components (19) Lifecycle (5) LiveData (7) Navigation (3) Room (4) AsyncTask (3) Audio (4) AudioRecord (1) AudioTrack (1) Backup / Restore (5) Backward Compatibility (5) Biometrics (3) Bitmap (20) Bluetooth (6) BottomNavigationView (2) BroadcastReceiver (5) Build (28) D8 (1) Gradle (15) Mainframer (1) Maven (7) Mirakle (1) Modules (5) Button (6) Floating Action Button (3) Camera (2) Canvas (9) Matrix (1) Path (2) Region (1) Shader (4) Christmas Face (2) Christmas Voice (2) Clean Architecture (1) Cloud Save (3) ColourWheel (3) ConnectivityManager (2) NetworkCallback (2) ConstraintLayout.com (1) ContentProvider (1) FileProvider (1) Custom Controls (10) Dagger2 (7) Data Binding (5) Handler (1) Observable (1) DesignLibrary (9) AppBarLayout (3) CoordinatorLayout (2) DrawerLayout (1) FloatingActionButton (3) NavigationView (1) Snackbar (1) TabLayout (3) TextInputLayout (1) Dialog Box (5) AlertDialog (2) DirectBoot (1) DownloadManager (3) Drawable (25) VectorDrawable (20) Fingerprint (2) Gesture Handling (2) ScaleGestureDetector (1) Gesture Navigation (2) Google TV (3) Gradient (5) Gradle Profiler (1) Graphics (5) HeadlessFragment (1) ImageDecoder (4) ImageView (12) KeyguardManager (1) Kotlin (17) Coroutines (3) Testability (2) Kyrie (1) Layouts (56) ConstraintLayout (14) Barrier (1) Chains (2) DrawerLayout (3) FlexboxLayout (3) FrameLayout (2) GridLayout (4) Layout weight (3) LinearLayout (7) MotionLayout (4) PercentFrameLayout (3) PercentRelativeLayout (2) RelativeLayout (2) TableLayout (5) Lint (1) ListView (7) Loader (3) CursorLoader (1) Location (2) LruCache (1) Machine Learning (3) Material Design (27) Material Shape (4) MediaRouter (1) Messenger (1) Message (1) Midi (2) MidiPad (5) MLKit (3) Mobile Vision (2) Multiple Displays (5) Muselee (15) Navigation (1) TaskStackBuilder (1) NestedScrollingChild (1) NestedScrollView (1) Non Tech (5) Notification (7) Direct Reply (1) Notification.Builder (4) Notification.WearableExtender (1) Nougat (6) Palette (5) Parcelize (1) PendingIntent (1) Permissions (5) Prefekt (3) Prism (3) ProgressBar (6) Pull To Refresh (2) RecyclerView (18) Adapter (11) GridLayoutManager (1) LayoutManager (3) LinearLayoutManager (5) LinearSmoothScroller (2) SmoothScroller (2) ViewHolder (4) Regex (1) RenderScript (10) Resource Types (25) Colour (2) Colour State List (1) Drawables (23) AnimatedVectorDrawable (6) Bitmap Drawable (3) Inset Drawable (2) Ripple (2) Ripple Drawable (3) Shape Drawable (4) State List Drawable (1) VectorDrawable (9) Rialto (4) Security (6) Certificate Pinning (3) Services (10) DreamService (2) GCMTaskService (1) IntentService (2) SharedPreferences (6) Smart Watch (3) StylingAndroid (1) Testing (1) Text (32) Classification (3) Currency (1) Diacritics (1) Linkify (1) Shadow (2) Spans (12) AnnotationSpan (6) ImageSpan (1) StyleSpan (2) URLSpan (1) Typefaces (1) Text Clock (12) TextToSpeech (1) Themes (15) Threads (3) Time (5) TimingLogger (2) Toolbar (2) CollapsingToolbarLayout (1) Transparency (6) UI Thread (6) Uncategorized (3) Unit Testing (6) JUnit 4 (1) JUnit 5 (6) User Experience (3) Version Management (1) View (8) Custom (4) View Binding (3) ViewOverlay (1) ViewPager (13) ViewPager2 (2) ViewPagerAnimator (3) ViewPagerIndicator (4) ViewStub (1) Volley (1) WeakReference (4) WindowInsets (2) WorkManager (2) Writing (2)ARCHIVES
Archives Select Month May 2020 (5) April 2020 (4) March 2020 (4) February 2020 (4) January 2020 (5) December 2019 (4) November 2019 (5) October 2019 (4) September 2019 (4) August 2019 (5) July 2019 (4) June 2019 (4) May 2019 (5) April 2019 (4) March 2019 (5) February 2019 (4) January 2019 (4) December 2018 (4) November 2018 (5) October 2018 (4) September 2018 (4) August 2018 (5) July 2018 (4) June 2018 (5) May 2018 (4) April 2018 (4) March 2018 (5) February 2018 (4) January 2018 (4) December 2017 (5) November 2017 (4) October 2017 (4) September 2017 (5) August 2017 (4) July 2017 (4) June 2017 (5) May 2017 (4) April 2017 (4) March 2017 (5) February 2017 (4) January 2017 (4) December 2016 (5) November 2016 (4) October 2016 (4) September 2016 (5) August 2016 (4) July 2016 (5) June 2016 (4) May 2016 (4) April 2016 (5) March 2016 (4) February 2016 (4) January 2016 (5) December 2015 (4) November 2015 (4) October 2015 (5) September 2015 (4) August 2015 (4) July 2015 (5) June 2015 (4) May 2015 (5) April 2015 (4) March 2015 (4) February 2015 (4) January 2015 (5) December 2014 (4) November 2014 (4) October 2014 (5) September 2014 (4) August 2014 (5) July 2014 (4) June 2014 (4) May 2014 (5) April 2014 (4) March 2014 (4) February 2014 (4) January 2014 (5) December 2013 (4) November 2013 (5) October 2013 (1) September 2013 (1) August 2013 (5) July 2013 (4) June 2013 (4) May 2013 (5) April 2013 (4) March 2013 (5) February 2013 (4) January 2013 (4) December 2012 (4) November 2012 (5) October 2012 (4) September 2012 (4) August 2012 (5) July 2012 (4) June 2012 (5) May 2012 (4) April 2012 (4) March 2012 (5) February 2012 (4) January 2012 (4) December 2011 (5) November 2011 (4) October 2011 (4) September 2011 (5) August 2011 (4) July 2011 (5) June 2011 (4) May 2011 (4) April 2011 (5) March 2011 (3)SOCIAL MEDIA
RECENT POSTS
* Material Shape: Cutting Corners * Material Shape: Living On The Edge * Material Shape: Gotchas * Material Shape: ShapeAppearance * AnimatedIcons: Share * AsyncAndroid: Introduction To Renderscript * ConstraintLayout: Sized Align* D8 Desugaring
* AnimatedIcons: Mail * Android 11: WindowInsetsUSEFUL LINKS
* Android Open Source Project* Android Weekly
* Official Android Developer SiteBLOGROLL
* Android UI Design Patterns * Cyril Mottier's Android blog* Grokking Android
* Martin van Zuilekom's blog * Official Android Developers Blog* Reto Meier's Blog
* Richard Hyndman's blogMETA
* Log in
* Entries feed
* Comments feed
* WordPress.org
2020 Styling Android __Styling Android
Proudly powered by WordPress Theme: LontanoPRO.
Details
Copyright © 2024 ArchiveBay.com. All rights reserved. Terms of Use | Privacy Policy | DMCA | 2021 | Feedback | Advertising | RSS 2.0