我发现原因是我正在使用Android-Iconics库-我删除了上下文注入,现在一切都很好。
我正在使用XML布局和Anko DSL的组合来构建我的应用程序,并且我注意到按钮的设计因其生成方式而异。
如果是Anko生成的按钮,则文本用大写字母(我认为应该用Material表示),并具有波纹效果。如果按钮是由XML创建的,则文本为小写且没有效果。
上方的按钮是XML,因此您可以在其中看到区别。
我尝试将自定义样式设置为按钮,但它似乎不起作用-我什至无法使 textAllCaps = true 工作。
目前,我正在使用androidx并扩展AppCompat和 Theme.AppCompat.Light.NoActionBar ,并且我尝试扩展 Widget.AppCompat.Button 来设置自定义样式没有运气的观点。
所有API级别(24、26和28)都在发生这种情况。在XML预览中,它确实显示良好。
当前XML是
<Button
android:text="@string/compartir"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/debunkShareButton"
android:textAllCaps="true"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintTop_toBottomOf="@+id/debunkTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
style="@style/Full_Yellow_Button"/>
全黄按钮是
<style name="Full_Yellow_Button" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/yellow_gradient</item>
</style>
有什么想法吗?谢谢!
答案 0 :(得分:1)
您的主题应该从Theme.MaterialComponents.xxxxx
扩展到
喜欢这个XML块
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
您可以创建TextView
类以将其设置为大写
class UppercaseTextView : TextView, ViewTreeObserver.OnPreDrawListener {
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {}
override fun setText(text: CharSequence, type: BufferType) {
super.setText(text.toString().toUpperCase(), type)
}
}
答案 1 :(得分:1)
如果您正在使用新的材质设计组件,请确保您的应用程序主题从主主题Theme.MaterialComponents
或其他相关主题扩展。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
<!-- ... -->
</style>
此外,您无需在XML和Java中都使用Button
来定义按钮,而无需使用通用的com.google.android.material.button.MaterialButton
类来定义按钮。
<com.google.android.material.button.MaterialButton
android:id="@+id/material_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_label_enabled"/>