按钮未显示 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的主要内容,如果未能解决你的问题,请参考以下文章

Material UI:更改未选中单选按钮的颜色

带有 Formik 的 Material UI 单选按钮 - 未设置 onSubmit 的值

FAB 按钮未在 android studio 布局编辑器中正确显示可绘制对象

@material-ui 图标未显示在屏幕上

Redux-form Material-UI下拉列表未显示下拉列表,选择

Angular Material Snackbar 未正确显示