如何return MaterialButton 默认边框颜色?
How to return MaterialButton default border color?
我有两个按钮,我想在按下的按钮上实现蓝色边框。按下按钮时,它的边框不会变成蓝色,另一个按钮的边框 return 默认。
我无法 return 默认边框正确。我写了函数,但是运行不正常。
我的按钮(第二个与另一个id和文本相同):
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_schemes_1"
style="@style/Buttons.Schemes"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/margin_4"
android:layout_weight="1"
android:text="@string/schemes_1"
app:icon="@drawable/ic_schemes_1" />
风格没什么意思:
<style name="Buttons.Schemes" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:typeface">sans</item>
<!--android:fontFamily="sans-serif-condensed-medium"-->
<item name="android:textColor">@android:color/black</item>
<item name="android:letterSpacing">0</item>
<item name="iconTint">@null</item>
<item name="backgroundTint">@android:color/white</item>
</style>
我最后的认识是在第一次点击发生之前找到并记住默认的边框值,所以在第一次我写:
private var defaultColor: Int = 0
然后
defaultColor = btn_schemes_1.strokeColor.defaultColor
和函数,当单击其中一个按钮时调用:
private fun setButtonsBorder(buttonNumber: Int) {
when (buttonNumber) {
1 -> {
btn_schemes_1.strokeColor = ColorStateList.valueOf(Color.BLUE)
btn_schemes_1.strokeWidth = 2
btn_schemes_2.strokeColor = ColorStateList.valueOf(defaultColor)
btn_schemes_2.strokeWidth = 1
}
2 -> {
btn_schemes_1.strokeColor = ColorStateList.valueOf(defaultColor)
btn_schemes_1.strokeWidth = 1
btn_schemes_2.strokeColor = ColorStateList.valueOf(Color.BLUE)
btn_schemes_2.strokeWidth = 2
}
}
}
但这也失败了,因为默认颜色实际上不是 "those" 默认值。当我设置它时,我发现它只是 colorPrimary
.
如何找到默认颜色或编写方法将边框颜色恢复为默认颜色?
好的,我自己搞定了
在更深入之后我在点击按钮之前调用它:
Timber.e(btn_schemes_1.strokeColor.toString())
并得到:
ColorStateList{mThemeAttrs=nullmChangingConfigurations=1073742848mStateSpecs=[[16842912], [-16842912]]mColors=[-16743049, 520093696]mDefaultColor=-16743049}
所以 520093696 是我的颜色。 Google 说 black12 constant
,由 0x1F000000
呈现
在
之后
private var defaultColor: Int = 0x1F000000
所有作品。
我有两个按钮,我想在按下的按钮上实现蓝色边框。按下按钮时,它的边框不会变成蓝色,另一个按钮的边框 return 默认。
我无法 return 默认边框正确。我写了函数,但是运行不正常。
我的按钮(第二个与另一个id和文本相同):
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_schemes_1"
style="@style/Buttons.Schemes"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/margin_4"
android:layout_weight="1"
android:text="@string/schemes_1"
app:icon="@drawable/ic_schemes_1" />
风格没什么意思:
<style name="Buttons.Schemes" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="android:typeface">sans</item>
<!--android:fontFamily="sans-serif-condensed-medium"-->
<item name="android:textColor">@android:color/black</item>
<item name="android:letterSpacing">0</item>
<item name="iconTint">@null</item>
<item name="backgroundTint">@android:color/white</item>
</style>
我最后的认识是在第一次点击发生之前找到并记住默认的边框值,所以在第一次我写:
private var defaultColor: Int = 0
然后
defaultColor = btn_schemes_1.strokeColor.defaultColor
和函数,当单击其中一个按钮时调用:
private fun setButtonsBorder(buttonNumber: Int) {
when (buttonNumber) {
1 -> {
btn_schemes_1.strokeColor = ColorStateList.valueOf(Color.BLUE)
btn_schemes_1.strokeWidth = 2
btn_schemes_2.strokeColor = ColorStateList.valueOf(defaultColor)
btn_schemes_2.strokeWidth = 1
}
2 -> {
btn_schemes_1.strokeColor = ColorStateList.valueOf(defaultColor)
btn_schemes_1.strokeWidth = 1
btn_schemes_2.strokeColor = ColorStateList.valueOf(Color.BLUE)
btn_schemes_2.strokeWidth = 2
}
}
}
但这也失败了,因为默认颜色实际上不是 "those" 默认值。当我设置它时,我发现它只是 colorPrimary
.
如何找到默认颜色或编写方法将边框颜色恢复为默认颜色?
好的,我自己搞定了
在更深入之后我在点击按钮之前调用它:
Timber.e(btn_schemes_1.strokeColor.toString())
并得到:
ColorStateList{mThemeAttrs=nullmChangingConfigurations=1073742848mStateSpecs=[[16842912], [-16842912]]mColors=[-16743049, 520093696]mDefaultColor=-16743049}
所以 520093696 是我的颜色。 Google 说 black12 constant
,由 0x1F000000
在
之后private var defaultColor: Int = 0x1F000000
所有作品。