按钮未显示 Material Design
Posted
技术标签:
【中文标题】按钮未显示 Material Design【英文标题】:Button not showing Material Design 【发布时间】:2019-08-24 22:08:37 【问题描述】:我发现原因是我使用的是 Android-Iconics 库 - 我删除了上下文注入,现在一切正常。
我使用 XML Layouts 和 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_
android:layout_
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"/>
而 Full_Yellow_Button 是
<style name="Full_Yellow_Button" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/yellow_gradient</item>
</style>
有什么想法吗?谢谢!
【问题讨论】:
你能分享你的 XML 吗? @Beyazid 是的,抱歉 - 请参阅更新后的问题。 @Naroh 你在使用设计支持库还是新材料设计库? @KaranMer 我现在正在使用新的材料设计库,但设计支持库也发生了同样的事情。 【参考方案1】:如果您正在使用新的材料设计组件,请确保您的应用程序主题扩展自主主题 Theme.MaterialComponents
或其他相关主题。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
<!-- ... -->
</style>
另外,你需要在你的xml和java中都使用com.google.android.material.button.MaterialButton
,而不是使用通用的Button
类来定义按钮。
<com.google.android.material.button.MaterialButton
android:id="@+id/material_button"
android:layout_
android:layout_
android:text="@string/button_label_enabled"/>
【讨论】:
嗨,卡兰,谢谢!我尝试过扩展 Theme.MaterialComponents.Light.NoActionBar 并使用视图 com.google.android.material.button.MaterialButton 但与预览不同的是,该应用程序一直显示带有小写字母的按钮(我不能它在 XML 中是大写的)。 在 xml 中设置android:textAllCaps="true"
。完成更改后清理并构建您的项目。
清理和重建项目后同样的事情(textAllCaps 已经存在)。我真的不知道为什么会发生这种情况。
你正在从Widget.AppCompat.Button
扩展你的按钮样式,你应该从Widget.MaterialComponents.Button
扩展它
我发现原因是我使用的是 Android-Iconics 库 - 我删除了上下文注入,现在一切都很好。【参考方案2】:
你的主题应该从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)
【讨论】:
谢谢!我已经更改为扩展 Theme.MaterialComponents.Light.NoActionBar 并且我仍然得到不同的设计,其中的文本为小写。使用自定义样式或不设置样式都会发生这种情况。截图:imgur.com/eGHzxUv 我更新了我的帖子,但是这个 textview 类无法更改为设计。它仅适用于设置为大写以上是关于按钮未显示 Material Design的主要内容,如果未能解决你的问题,请参考以下文章
带有 Formik 的 Material UI 单选按钮 - 未设置 onSubmit 的值
FAB 按钮未在 android studio 布局编辑器中正确显示可绘制对象