当使用Theme.MaterialComponents.Light.NoActionBar样式时,设置按钮背景不起作用

CnP*_*eng 14 android themes styles

为了使用Chip和ChipGroup,我设置应用程序样式扩展"Theme.MaterialComponents.Light.NoActionBar"int manifests.xml,然后我设置Button"android:background"attr,但它没有效果!为什么?我该怎么办?

这是我的风格:

  <style name="AppBaseTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/primary_material_light</item>
    <item name="colorPrimaryDark">@color/header_color</item>
    <item name="actionBarSize">48dp</item>
    <item name="android:screenOrientation">portrait</item>
    <!--<item name="buttonStyle">@style/AntButton</item>-->
    <!--<item name="materialButtonStyle">@style/AntButton</item>-->
    <!--<item name="android:button"></item>-->
    <!--<item name="android:progressTint">@color/ffc000</item>-->
    <item name="colorAccent">@color/ffc000</item>
</style>


<style name="AntButton" parent="android:Widget">
    <item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
    <item name="android:textAppearance">?android:attr/textAppearanceButton</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:minWidth">88dip</item>
    <item name="android:focusable">true</item>
    <item name="android:clickable">true</item>
    <item name="android:gravity">center_vertical|center_horizontal</item>
    <!--<item name="android:colorButtonNormal">@color/white</item>-->
</style>
Run Code Online (Sandbox Code Playgroud)

我试图改变buttonStyle和materialButtonStyle,但也没有效果!

这是我的布局xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/ll_popup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@color/white"
        android:divider="@drawable/shape_divider_05dp"
        android:orientation="vertical"
        android:showDividers="beginning|middle">

        <!--only can use backgroundTint to change background color-->
        <Button
            android:id="@+id/item_popupwindows_Photo"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:backgroundTint="@color/white"
            android:text="Pictrue"
            android:textColor="@color/c_666666"
            android:textSize="16sp" />

        <!--background not effect !!-->
        <Button
            android:id="@+id/item_popupwindows_cancel"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="@color/white"
            android:text="cancel"
            android:textColor="@color/c_666666"
            android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是结果:

在此输入图像描述

因为我在APP中使用过Chip和ChipGroup,所以我必须使用主题扩展MaterialComponents!你知道怎么解决吗?请告诉我,谢谢!

在这个页面中不能使用android:background与新材料组件的按钮,作者想要更改默认填充,但我想更改backgroundDrawable,所以,它对我不起作用.

Ben*_* P. 28

如果您想要一个true Button,但是可以像框架一样Button(而不是MaterialButton)进行修改,则可以在布局文件中显式指定框架版本。替换为:

<Button
    android:id="@+id/item_popupwindows_cancel"
    ... />
Run Code Online (Sandbox Code Playgroud)

有了这个:

<android.widget.Button
    android:id="@+id/item_popupwindows_cancel"
    ... />
Run Code Online (Sandbox Code Playgroud)

这将为您提供锡盒上的内容: android.widget.Button,应以您期望的方式响应样式。

同样,<androidx.appcompat.widget.AppCompatButton>如果要支持库功能而不要使用材料组件功能,则可以使用。

  • 当您使用非命名空间的标签(如`&lt;Button&gt;`)时,LayoutInflater将选择要填充的具体实现。由于您具有`Theme.MaterialComponents`主题,因此LayoutInflater将在可能的情况下选择为小部件的材料组件版本充气。换句话说,对于该主题,“ &lt;按钮&gt;”和“ &lt;com.google.android.material.button.MaterialButton&gt;”是相同的。但是您可以通过指定其他实现来选择它,例如&lt;androidx.appcompat.widget.AppCompatButton&gt;或&lt;android.widget.Button&gt;。 (4认同)