material-components-android
material-components-android copied to clipboard
[ProgressIndicator] Problems with setting the style for the heirs of the class.
Description: Problems with setting the style for the heirs of the class BaseProgressIndicator. Occurs for both CircularProgressIndicator and LinearProgressIndicator. If you create a class that inherits the LinearProgressIndicator or CircularProgressIndicator class, then when creating it programmatically or without specifying a style in the layout, the linearProgressIndicatorStyle style is always applied
Expected behavior: Apply style from the constructor of the created class inherited from LinearProgressIndicator or CircularProgressIndicator. As it is for example in MaterialButton and others.
Source code: The example code created to display the problem
attrs.xml
<attr name="linearProgressIndicatorSmallStyle" format="reference" />
<attr name="linearProgressIndicatorMediumStyle" format="reference" />
<attr name="linearProgressIndicatorLargeStyle" format="reference" />
styles.xml
<style name="Progress.Linear.Large" parent="Widget.Material3.LinearProgressIndicator">
<item name="trackColor">#FEC700</item>
<item name="trackThickness">36dp</item>
</style>
<style name="Progress.Linear.Medium" parent="Widget.Material3.LinearProgressIndicator">
<item name="trackColor">#B1A6FF</item>
<item name="trackThickness">24dp</item>
</style>
<style name="Progress.Linear.Small" parent="Widget.Material3.LinearProgressIndicator">
<item name="trackColor">#FF506F</item>
<item name="trackThickness">12dp</item>
</style>
themes.xml
<item name="linearProgressIndicatorStyle">@style/Progress.Linear.Medium</item>
<item name="linearProgressIndicatorSmallStyle">@style/Progress.Linear.Small</item>
<item name="linearProgressIndicatorMediumStyle">@style/Progress.Linear.Medium</item>
<item name="linearProgressIndicatorLargeStyle">@style/Progress.Linear.Large</item>
classes
class LargeProgressIndicator @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.attr.linearProgressIndicatorLargeStyle
) : LinearProgressIndicator(context, attrs, defStyleAttr)
class MediumProgressIndicator @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.attr.linearProgressIndicatorMediumStyle
) : LinearProgressIndicator(context, attrs, defStyleAttr)
class SmallProgressIndicator @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.attr.linearProgressIndicatorSmallStyle
) : LinearProgressIndicator(context, attrs, defStyleAttr)
layout snippet
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Current behavior"
android:paddingTop="32dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LargeProgressIndicator
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<MediumProgressIndicator
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<SmallProgressIndicator
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="Expected behavior"
android:paddingTop="32dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LargeProgressIndicator
style="?linearProgressIndicatorLargeStyle"
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<MediumProgressIndicator
style="?linearProgressIndicatorMediumStyle"
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<SmallProgressIndicator
style="?linearProgressIndicatorSmallStyle"
android:layout_margin="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Result
It also doesn't work if, create from Code
SmallProgressIndicator(context)
SmallProgressIndicator(context, attrs)
SmallProgressIndicator(context, attrs, R.attr.linearProgressIndicatorSmallStyle)
LinearProgressIndicator(context, attrs, R.attr.linearProgressIndicatorSmallStyle)
Material Library version: Tested on 1.11.0, 1.12.0-beta01
Device: Android emulator API 29
@pekingme assigning this to you as you're currently working on the ProgressIndicator
@paulfthomas @pekingme any progress on this issue? When can we expect a fix? :)