按钮未显示材料设计

时间:2019-04-03 11:32:02

标签: android android-layout anko

我发现原因是我正在使用Android-Iconics库-我删除了上下文注入,现在一切都很好。

我正在使用XML布局和Anko DSL的组合来构建我的应用程序,并且我注意到按钮的设计因其生成方式而异。

如果是Anko生成的按钮,则文本用大写字母(我认为应该用Material表示),并具有波纹效果。如果按钮是由XML创建的,则文本为小写且没有效果。

Screenshot

上方的按钮是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>

有什么想法吗?谢谢!

2 个答案:

答案 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"/>