Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

버튼

버튼은 사용자가 터치할 때 어떤 작업이 발생하는지 알려주는 텍스트나 아이콘 또는 텍스트와 아이콘으로 구성됩니다.

텍스트나 아이콘 하나만 있는 버튼을 원하는지 또는 둘 다 있는 버튼을 원하는지에 따라 레이아웃에서 다음 세 가지 방법으로 버튼을 만들 수 있습니다.

  • 텍스트가 있는 버튼은 다음과 같이 Button 클래스를 사용합니다.
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_text"
        ... />
    
  • 아이콘이 있는 버튼은 다음과 같이 ImageButton 클래스를 사용합니다.
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/button_icon"
        android:contentDescription="@string/button_icon_desc"
        ... />
    
  • 텍스트와 아이콘이 있는 버튼은 다음과 같이 android:drawableLeft 속성과 함께 Button 클래스를 사용합니다.
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_text"
        android:drawableLeft="@drawable/button_icon"
        ... />
    

주요 클래스는 다음과 같습니다.

클릭 이벤트에 응답

사용자가 버튼을 클릭하면 Button 객체가 클릭 시 이벤트를 수신합니다.

버튼의 클릭 이벤트 핸들러를 정의하려면 XML 레이아웃의 <Button> 요소에 android:onClick 속성을 추가합니다. 이 속성 값은 클릭 이벤트에 응답하여 호출하려는 메서드의 이름이어야 합니다. 그런 다음 레이아웃을 호스팅하는 Activity가 상응하는 메서드를 구현해야 합니다.

예를 들어 다음은 android:onClick을 사용하는 버튼이 있는 레이아웃입니다.

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />

이 레이아웃을 호스팅하는 Activity 내에서 다음 메서드가 클릭 이벤트를 처리합니다.

Kotlin

/** Called when the user touches the button */
fun sendMessage(view: View) {
    // Do something in response to button click
}

자바

/** Called when the user touches the button */
public void sendMessage(View view) {
    // Do something in response to button click
}

android:onClick 속성에서 선언하는 메서드에는 위 예와 같이 정확하게 서명이 있어야 합니다. 특히 메서드는 다음 사항을 충족해야 합니다.

  • 공개되기
  • void 반환
  • 유일한 매개변수로 View를 정의(이것은 클릭한 View가 됩니다).

OnClickListener 사용

XML 레이아웃에서가 아닌 프로그래매틱 방식으로 클릭 이벤트 핸들러를 선언할 수도 있습니다. 이 방법은 런타임 시 Button을 인스턴스화하거나 Fragment 서브클래스에서 클릭 동작을 선언해야 하는 경우에 필요할 수 있습니다.

프로그래매틱 방식으로 이벤트 핸들러를 선언하려면 View.OnClickListener 객체를 만들고 setOnClickListener(View.OnClickListener)를 호출하여 버튼에 할당합니다. 예:

Kotlin

val button: Button = findViewById(R.id.button_send)
button.setOnClickListener {
    // Do something in response to button click
}

자바

Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Do something in response to button click
    }
});

버튼 스타일 지정

버튼 모양(배경 이미지 및 글꼴)은 기기마다 다를 수 있습니다. 여러 제조업체의 기기에서 입력 컨트롤의 기본 스타일이 다른 경우가 많기 때문입니다.

전체 애플리케이션에 적용하는 테마를 사용하여 컨트롤의 스타일을 어떻게 지정할지 정확하게 제어할 수 있습니다. 예를 들어 Android 4.0 이상을 실행하는 모든 기기에서 앱에 Holo 테마를 사용하도록 하려면 매니페스트의 <application> 요소에서 android:theme="@android:style/Theme.Holo"를 선언합니다. 또한 이전 기기를 지원하면서 Holo 테마를 사용하는 방법에 관한 자세한 내용은 블로그 게시물인 Holo Everywhere를 참조하세요.

다양한 배경의 개별 버튼을 맞춤설정하려면 드로어블 또는 색상 리소스와 함께 android:background 속성을 지정합니다. 또는 버튼에 스타일을 적용할 수 있습니다. 이 방법은 HTML 스타일과 유사한 방식으로 작동하여 배경, 글꼴, 크기 등 여러 스타일 속성을 정의합니다. 스타일 적용에 관한 자세한 내용은 스타일과 테마를 참조하세요.

테두리 없는 버튼

도움이 될 수 있는 디자인 중 하나가 '테두리 없는' 버튼입니다. 테두리 없는 버튼은 기본 버튼과 비슷하나 테두리나 배경이 없고 다양한 상태(예: 클릭한 경우)에서 여전히 모양이 변경된다는 점이 다릅니다.

테두리 없는 버튼을 만들려면 버튼에 borderlessButtonStyle 스타일을 적용합니다. 예:

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

맞춤 배경

버튼 모양을 제대로 다시 정의하려면 맞춤 배경을 지정하면 됩니다. 그러나 간단한 비트맵이나 색상을 제공하는 대신 배경은 버튼의 현재 상태에 따라 모양을 변경하는 상태 목록 리소스여야 합니다.

다양한 버튼 상태에 사용할 세 가지 이미지나 색상을 정의하는 XML 파일에서 상태 목록을 정의할 수 있습니다.

버튼 배경에 상태 목록 드로어블을 만들려면 다음 단계를 따르세요.

  1. 기본 버튼 상태, 눌러진 버튼 상태, 포커스가 있는 버튼 상태를 표시하는 버튼 배경에 세 가지 비트맵을 만듭니다.

    이미지가 다양한 크기의 버튼에 맞도록 하려면 비트맵을 나인 패치 비트맵으로 만듭니다.

  2. 비트맵을 프로젝트의 res/drawable/ 디렉터리에 배치합니다. button_default.9.png, button_pressed.9.pngbutton_focused.9.png와 같이 각 비트맵이 표시하는 버튼 상태를 반영하도록 각 비트맵의 이름을 올바르게 지정해야 합니다.
  3. 새로운 XML 파일을 res/drawable/ 디렉터리에 만듭니다(button_custom.xml과 같은 이름으로 지정). 다음 XML을 삽입합니다.
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_pressed"
              android:state_pressed="true" />
        <item android:drawable="@drawable/button_focused"
              android:state_focused="true" />
        <item android:drawable="@drawable/button_default" />
    </selector>
    

    이렇게 해서 버튼의 현재 상태에 기반해 이미지를 변경하는 단일 드로어블 리소스를 정의합니다.

    • 첫 번째 <item>은 버튼을 누를 때(버튼이 활성화될 때) 사용할 비트맵을 정의합니다.
    • 두 번째 <item>은 버튼에 포커스를 맞출 때(트랙볼이나 방향 패드를 사용하여 버튼을 강조표시할 때) 사용할 비트맵을 정의합니다.
    • 세 번째 <item>은 버튼이 기본 상태일 때(누르지도 포커스가 있지도 않을 때) 사용할 비트맵을 정의합니다.

    참고: <item> 요소의 순서가 중요합니다. 이 드로어블이 참조될 때 <item> 요소를 차례대로 순회하여 어떤 요소가 현재 버튼 상태에 적합한지 판단합니다. 기본 비트맵은 마지막이므로 조건 android:state_pressedandroid:state_focused가 모두 false로 평가된 경우에만 적용됩니다.

    이 XML 파일은 이제 단일 드로어블 리소스를 표시하며 배경으로 Button에서 참조할 때 표시되는 이미지는 이러한 세 가지 상태에 따라 변경됩니다.

  4. 그런 다음 드로어블 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"
        android:background="@drawable/button_custom"  />
    

사용 중지, 마우스 오버 또는 기타 버튼 상태를 정의하는 방법을 비롯하여 XML 구문에 관한 자세한 내용은 상태 목록 드로어블을 참조하세요.