버튼 그림자를 제거하는 방법 (Android)


168

버튼에서 그림자를 제거하여 더 평평하게 보이게하고 싶습니다.

나는 지금 이것을 가지고있다 :

그림자가있는 취소 버튼

그러나 나는 이것을 원한다.

그림자없이 취소 버튼


나는 여기에 의견을 작성한다. 그것은 나를 위해 일한다. [ stackoverflow.com/questions/27867284/… [1] : stackoverflow.com/questions/27867284/…
msamardzic

답변:


404

또 다른 대안은

style="?android:attr/borderlessButtonStyle"

http://developer.android.com/guide/topics/ui/controls/button.html에 설명 된대로 버튼 xml에

예를 들면

<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />

버튼 스타일, 즉 그림자와 엠보 스가 제거됩니다. 모양이있는 선택기를 추가하는 것은 선택 사항입니다. 더 정확한 답변입니다.
Juan José Melero Gómez

35
또한 버튼에 사용자 정의 스타일을 사용합니다. <style name = "MyCustomButtonStyle"parent = "Widget.AppCompat.Button.Borderless">
Tobliug

125

가장 간단한 방법은이 태그를 버튼에 추가하는 것입니다.

android:stateListAnimator="@null"

API 레벨 21 이상이 필요하지만 ..


2
나에게 크게 일했다
KoreanXcodeWorker

1
나는이 방법을 더 좋아한다. 더 유연하다.
Ayejuni Ilemobayo Kings

@Alon Kogan, android:stateListAnimator 속성 사용에 대한 이전 버전과의 호환성이 있습니까?
blueware 2018 년

이 솔루션을 사용하면 스타일에서 상속해야하는 스타일 봇을 만들 수 borderlessButtonStyle있어 유연성이 향상됩니다.
Juan José Melero Gómez

이것은 버튼을 누르는 동안 그림자를 제거해야하기 때문에 borderlessButtonStyle 태그가 작동하지 않는 유일한 해결책입니다.
ACAkgul

61

나는 커스텀 스타일을 사용한다

<style name="MyButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless"></style>

추가하는 것을 잊지 마십시오

<item name="android:textAllCaps">false</item>

그렇지 않으면 버튼 텍스트가 대문자로 표시됩니다.


59

코 틀린

stateListAnimator = null

자바

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
쉽고 깨끗합니다.
JCasso

23

시도 : android:stateListAnimator="@null"


9
이것이 OP의 문제를 해결할 수는 있지만 컨텍스트를 추가하는 것이 좋습니다. 왜 도움이 되나요? 또한, "이것을 시도하십시오"는 약간 오해의 소지가 있습니다. 그것이 문제를 해결하거나 추측 할 것입니까? 그렇다면 대신 주석을 작성해야합니다.
GergelyPolonkai

API 21이 필요합니다.
CoolMind


6

이것을 버튼의 배경으로 사용하면 도움이 될 수 있습니다. 필요에 따라 색상을 변경하십시오.

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_light" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_dark" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
</selector>

4
이것이 어떻게 작동하는지 설명 할 수 있습니까? 그것은 나를 위해 그림자를 제거하지 않았습니다.
CACuzcatlan

원래 배경을 그림자로
바꾸고이

3

@ Alt-Cat 답변이 나를 위해 일합니다!

R.attr.borderlessButtonStyle에는 그림자가 없습니다.

버튼의 문서는 훌륭합니다.

또한 두 번째 생성자의 사용자 정의 버튼에서이 스타일을 설정할 수 있습니다.

    public CustomButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.borderlessButtonStyle);
    }

3

위의 모든 답변은 훌륭하지만 다른 옵션을 제안합니다.

<style name="FlatButtonStyle" parent="Base.Widget.AppCompat.Button">
 <item name="android:stateListAnimator">@null</item>
 <!-- more style custom here --> 
</style>


Alon Kogan ( stackoverflow.com/a/39122825/2914140 ) 과 유사합니다 .
CoolMind

위의 5ish와 다른 점은 무엇입니까?
zeroDivider

2

Button 대신 TextView를 사용하고 Java 코드에서 클릭 리스너를 추가 할 수 있습니다.

활동 레이아웃 XML에서 :

<TextView
    android:id="@+id/btn_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark"
    android:text="@string/btn_text"
    android:gravity="center"
    android:textColor="@color/colorAccent"
    android:fontFamily="sans-serif-medium"
    android:textAllCaps="true" />

활동 자바 파일에서 :

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });

이것은 정답은 아니지만 실제로 비슷한 문제로 내 문제를 해결하는 데 도움이되었으므로 감사합니다!
box

아하! 좋은 생각-빠른 수정을 해주었습니다 –
Rohit Kumar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.