If I set Theme.MaterialComponents.Light as my main theme, will be any difference between these two buttons if I use them in an xml layout?
<Button />
<com.google.android.material.button.MaterialButton />
As I saw they behave both as MaterialButtons. If I want to get the behavior of the old plain button, I have to use:
<androidx.appcompat.widget.AppCompatButton />
Thanks in advance!
A convenience class for creating a new Material button. This class supplies updated Material styles for the button in the constructor. The widget will display the correct default Material styles without the use of the style flag.
There are free icons under New > Vector Assets on Android Studio. Set them as android:drawableLeft of the Button and you'll achieve something like your sample as well.
Button is subclass of TextView class and CompoundButton is the subclass of Button class. There are different types of buttons in android such as RadioButton, ToggleButton, CompoundButton etc.
If you are using a MaterialComponents Theme there is no difference between <Button />
and <com.google.android.material.button.MaterialButton />
.
There is an auto-inflation enabled which will replace <Button
with <com.google.android.material.button.MaterialButton
at runtime.
The MaterialComponentsViewInflater
replaces some framework widgets with Material Components ones at inflation time, provided if a MaterialComponents theme is in use.
Something similar happens also with AppCompat (you can check that MaterialComponentsViewInflater extends AppCompatViewInflater
).
It means that, the <Button
is replaced <com.google.android.material.button.MaterialButton
at runtime, if you are using a MaterialComponents Theme.
If I want to get the behavior of the old plain button, I have to use:
<androidx.appcompat.widget.AppCompatButton />
.
It is an option, but not necessarily.
It depends by what you want to achieve. You can also config a custom style since the Widget.MaterialComponents.Button
style inherits by Widget.AppCompat.Button
style.
It is the difference:
<style name="Widget.MaterialComponents.Button" parent="Widget.AppCompat.Button">
<item name="enforceMaterialTheme">true</item>
<item name="enforceTextAppearance">true</item>
<item name="android:textAppearance">?attr/textAppearanceButton</item>
<item name="android:textColor">@color/mtrl_btn_text_color_selector</item>
<item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
<item name="android:paddingTop">@dimen/mtrl_btn_padding_top</item>
<item name="android:paddingBottom">@dimen/mtrl_btn_padding_bottom</item>
<item name="android:insetLeft">0dp</item>
<item name="android:insetRight">0dp</item>
<item name="android:insetTop">@dimen/mtrl_btn_inset</item>
<item name="android:insetBottom">@dimen/mtrl_btn_inset</item>
<item name="android:stateListAnimator" ns2:ignore="NewApi">@animator/mtrl_btn_state_list_anim</item>
<item name="cornerRadius">@null</item>
<item name="elevation">@dimen/mtrl_btn_elevation</item>
<item name="iconPadding">@dimen/mtrl_btn_icon_padding</item>
<item name="iconTint">@color/mtrl_btn_text_color_selector</item>
<item name="rippleColor">@color/mtrl_btn_ripple_color</item>
<item name="backgroundTint">@color/mtrl_btn_bg_color_selector</item>
<item name="shapeAppearance">?attr/shapeAppearanceSmallComponent</item>
</style>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With