TransWikia.com

Como definir uma cor de fundo e bordas para meu botão além dos estados pressionado e não pressionado no botão com?

Stack Overflow em Português Asked on November 15, 2021

Eu gostaria de além de meu botão ter uma borda inferior mais que tivesse os estados do botão a exemplo pressionado, não pressionado seria outra cor…

Eu estou tentando fazer tudo isso no meu xml do drawable para setar um background para meu botão. Segue xml do drawable:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
        <solid android:color="#362E2E" />
    </shape>
</item>
<item android:bottom="3dp" >
    <shape android:shape="rectangle">
        <solid android:color="#2a5aa4" />
    </shape>
</item>
<selector >

    <!-- pressed -->
    <item android:drawable="@android:color/transparent" android:state_pressed="true"/>

    <!-- focused -->
    <item android:drawable="#362E2E" android:state_focused="true"/>

    <!-- default -->
    <item android:drawable="#362E2E"/>

</selector>

Como posso fazer isso?

2 Answers

Para adicionar a borda no botão tem uma tag chamada stroke e para que haja apenas a borda inferior, é preciso negativar os atributos top, right e left da tag item.

O drawable ficaria assim:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <layer-list>
        <item android:bottom="-10dp" android:left="-10dp" android:right="-10dp">
            <shape android:shape="rectangle">
                <solid android:angle="270" android:color="#a0e1" />

                <stroke android:width="10dp" android:color="#5c3708" />
            </shape>
        </item>

    </layer-list>
</item>
<item android:state_enabled="true">
    <layer-list>
        <item android:left="-10dp" android:right="-10dp" android:top="-10dp">
            <shape android:shape="rectangle">
                <solid android:angle="270" android:color="#a0a67637" />

                <stroke android:width="10dp" android:color="#5c3708" />
            </shape>
        </item>
    </layer-list>
</item>
</selector>

Answered by Natan Felipe on November 15, 2021

Uma maneira seria fazer programaticamente. Exemplo:

private boolean isChecked

Alterar a cor do botão quando for clicado

    button_1 = (Button) view.findViewById(R.id.button_1);
    button_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(isChecked == true){
                button_1.setBackgroundColor(getResources().getColor(R.color.color_1));
                isChecked = false;
            }else {
                button_1.setBackgroundColor(getResources().getColor(R.color.color_2));
                isChecked = true;
            }


        }
    });

Answered by Edson Reis on November 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP