it-swarm-pt.com

quando usar o estilo Theme.MaterialComponents.Light.NoActionBar, defina o efeito de plano de fundo do botão

A fim de usar Chip e ChipGroup, eu definir estilo de aplicação estende "Theme.MaterialComponents.Light.NoActionBar" int manifestests.xml, então eu definir Button "Android: background" attr, mas não é efeito! porque? e o que eu posso fazer ?

esse é meu estilo:

  <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>

Eu tentei mudar buttonStyle e materialButtonStyle, mas não o efeito também!

este é o meu layout 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>

isso é resultado:

 enter image description here

Porque eu usei Chip e ChipGroup no APP, eu tenho que tema do usuário estende MaterialComponents! você sabe como resolver isso? por favor me diga, obrigado!

nesta página Não é possível usar o Android: fundo com o botão dos novos componentes de material , o autor quer alterar o preenchimento padrão, mas eu quero mudar o backgroundDrawable, então, não funciona para mim.

5
CnPeng

Se você quiser uma verdadeira Button, mas uma que possa modificar como a estrutura Button (em vez da MaterialButton), então você pode especificar explicitamente a versão da estrutura em seu arquivo de layout. Substitua isto:

<Button
    Android:id="@+id/item_popupwindows_cancel"
    ... />

com isso:

<Android.widget.Button
    Android:id="@+id/item_popupwindows_cancel"
    ... />

Isso lhe dará o que diz na lata: um Android.widget.Button, que deve responder ao estilo da maneira que você espera.

Da mesma forma, você pode usar um <androidx.appcompat.widget.AppCompatButton> se quiser recursos de biblioteca de suporte, mas não recursos de componentes de material.

4
Ben P.

Neste caso particular, o LinearLayout que prende seu segundo Button parece ter uma cor de fundo branca. Isso significa que você não precisa especificar explicitamente um plano de fundo branco para o seu Button; você pode apenas deixar o background do LinearLayout aparecer.

Isso pode ser feito usando o estilo "Botão de texto" de MaterialButton:

style="@style/Widget.MaterialComponents.Button.TextButton"
0
Ben P.