맞춤 서클 버튼


187

사용자 정의 버튼을 만들고 싶습니다. 원이어야합니다. 서클 버튼을 만들려면 어떻게해야합니까? 나는 draw9patch로 가능하지 않다고 생각합니다.

또한 사용자 정의 버튼을 만드는 방법을 모르겠습니다!

당신은 어떤 제안이 있습니까?


버튼 클래스를 확장하고 onDraw 메서드를 재정의해야합니다.
Ashwin N Bhanushali

2
그러나 내가 그것을 확장하고 사용자가 원을 벗어나면 문제가 있습니다. Onlcick이 호출됩니다.이를 해결하는 방법.
Ata

왜 둥근 모양의 이미지를 버튼의 배경으로 설정하지 않습니까?
MKJParekh

간단한 OnDrawn을 수행했는데 디자인 뷰에 표시되지만 응용 프로그램을 실행하려고 할 때 다음과 같이로드 할 때이 문제가 발생합니다. android.view.InflateException : 이진 XML 파일 줄 # 52 : 클래스 com.inaros.magicbox._customButtonPlay 팽창 오류
Ata

답변:


346

다음과 같이 XML 드로어 블을 사용하십시오.

로 다음과 같은 내용을 저장 round_button.xmldrawable폴더

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="#c20586"/>
        </shape>
    </item>
</selector>

Android Material Effect :FloatingActionButton 더 나은 옵션 이지만 xml selector를 사용하여 폴더 drawable-v21를 만들려면 다음 XML을 사용하여 폴더 를 만들고 res다른 폴더 를 저장하십시오.round_button.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#c20586">
    <item>
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
</ripple>

그리고 Button이것을 다음과 같이 xml에서 배경으로 설정하십시오 .

<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/round_button"
android:gravity="center_vertical|center_horizontal"
android:text="hello"
android:textColor="#fff" />

중대한:

  1. 이 모든 상태 (활성화, 비활성화, 강조 표시 등)를 표시하려면 여기에 설명 된대로 선택기를 사용 합니다 .
  2. Drawable이 이전 버전과 호환되도록하려면 두 파일을 모두 보관해야합니다. 그렇지 않으면 이전 Android 버전에서 이상한 예외가 발생합니다.

drawable 폴더는 'drawable'이라는 폴더를 열거 나 drawable-mdpi, hdpi 등에 저장하는 것을 의미합니까?
Jjang

@Jjang no, 그냥 'drawable'폴더에 저장하면됩니다. drawable에 대한 모든 XML 리소스는 일반적으로 mdpi, hdpi 등이 아닌 'drawable'에 저장됩니다.
Adil Soomro

K 들으, 나는 :) 지금까지 전혀 당김 폴더 없었다 (단 MDPI, hdpi에 ... 그리고 -v21)

추신 : 버튼에 기본 리플 색상을 지정하는 방법은 무엇입니까? 기본적으로 앱의 모든 버튼을 색칠하는 회색과 같습니다.
Jjang

@AdilSoomro 이메일 주소 pls가 필요하거나 나에게 adilm717@gmail.com , pak에서
adil

67

Markushi는 놀라운 효과를 가진 원 버튼 위젯을 작성했습니다. 여기를 클릭 하십시오 !

여기에 이미지 설명을 입력하십시오


원형이 아닌 이미지와 함께 이것을 사용하는 방법?
tomsoft

3
이 답변에 연결된 라이브러리는 더 이상 사용되지 않습니다. 저자 (Markushi)는 플로팅 액션 버튼을 대신 사용할 것을 권장 합니다.
Reinstate Monica

@ABoschman 원형 버튼 위젯에 텍스트를 넣을 수 있습니까? 또는 드로어 블 전용
Ruchir Baronia 3:26의

@RuchirBaronia Android FAB을 고려해야한다고 생각합니다. 작은 둥근 버튼 안에 얼마나 많은 산문을 배치하고 싶습니까? 아이콘으로 만든 것 같습니다. 체크 아웃 : google.com/design/spec/components/…
Monica Monica

@ABoschman 이봐,하지만 난이 라이브러리 에서이 버튼의 효과를 정말 좋아합니다. 어떤 방법이 있습니까?
Ruchir Baronia


12

공식 머티리얼 컴포넌트 라이브러리를 사용하면 MaterialButtonWidget.MaterialComponents.Button.Icon 스타일 적용을 .

다음과 같은 것 :

   <com.google.android.material.button.MaterialButton
            android:layout_width="48dp"
            android:layout_height="48dp"
            style="@style/Widget.MaterialComponents.Button.Icon"
            app:icon="@drawable/ic_add"
            app:iconSize="24dp"
            app:iconPadding="0dp"
            android:insetLeft="0dp"
            android:insetTop="0dp"
            android:insetRight="0dp"
            android:insetBottom="0dp"
            app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"
            />

현재 app:iconPadding="0dp", android:insetLeft,android:insetTop , android:insetRight, android:insetBottom속성은 통통함 공간을 피하는 버튼의 아이콘을 중심으로 필요하다.

사용 app:shapeAppearanceOverlay둥근 모서리를 얻으려면 속성을 . 이 경우 원이 생깁니다.

  <style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

최종 결과 :

여기에 이미지 설명을 입력하십시오


1
@Gabriele Mariotti에게 감사합니다. app:iconPadding="0dp"아이콘을 중앙에 배치 해야 할 필요성을 강조 할 가치 가 있습니다. 내가 이것을 찾을 때까지 나는 센터를 시험하는 많은 시간을 태웠다. app : iconGravity에 "중심"값이 누락 된 것으로 보입니다.
scottyab

1
@Gabriele Mariotti에게 감사합니다. 나를 위해 잘 작동하십시오!
Androidz

2

VectorDrawable 및 ConstraintLayout을 사용하려는 경우

<FrameLayout
            android:id="@+id/ok_button"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:foreground="?attr/selectableItemBackgroundBorderless"
            android:background="@drawable/circle_button">
                <android.support.constraint.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <ImageView
                        android:id="@+id/icon_of_button"
                        android:layout_width="32dp"
                        android:layout_height="32dp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:srcCompat="@drawable/ic_thumbs_up"/>
                    <TextView
                        android:id="@+id/text_of_button"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/icon_of_button"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        android:layout_marginTop="5dp"
                        android:textColor="@android:color/white"
                        android:text="ok"
                        />
                </android.support.constraint.ConstraintLayout>
            </FrameLayout>

원 배경 : circle_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="1000dp" />
<solid android:color="#41ba7a" />
<stroke
    android:width="2dip"
    android:color="#03ae3c" />
<padding
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp" />
</shape>

2

FAB보기 버튼의 경우이 스타일은 다음과 MaterialButton같습니다.

<com.google.android.material.button.MaterialButton
    style="@style/Widget.MaterialComponents.ExtendedFloatingActionButton"
    app:cornerRadius="28dp"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:text="1" />

결과:

여기에 이미지 설명을 입력하십시오

크기를 변경하면 버튼 크기의 절반을로 사용하십시오 app:cornerRadius.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.