[Android] Button

728x90

 

- 문자열을 표시하는 버튼과 이미지를 표시하는 버튼이 있다.
   → 뭘 표시하느냐만 다르고 똑같다고 보면 됨

- 이미지의 경우 alias 폴더에 집어 넣는다
 → 이미지 파일명은 절대 띄어쓰기 쓰면 안되고 모두 소문자로만 구성되어 있어야 한다.
 → 대문자가 섞여있으면 문제가 생긴다.

 

1. 버튼 이미지 추가하기 

  (1) 이미지를 res - drawable 폴더에 넣는다

 

  (2) 이미지 변경을 누르면 추가한 이미지가 보인다.

 

주요 메서드

- setText : 버튼에 표시될 문자열

- setBitmap : 이미지 버튼에 표시될 이미지 설정

 

package kr.co.button;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import kr.co.button.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());

        //문자열 변경
        activityMainBinding.button.setText("버튼 텍스트 변경");

        //버튼 이미지 변경
        //Resources는 res 폴더 안에 있는 파일들을 관리하는 객체임 그걸 먼저 추출해야함
        Resources res = getResources();
        Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.imgflag2);
        activityMainBinding.imageButton.setImageBitmap(bitmap);
        setContentView(activityMainBinding.getRoot());
    }
}

 

 

주요 이벤트 

- Click : 버튼을 눌렀을 때 발생하는 이벤트 

리스너는 View.으로 되어 있는 것으로 고른다.  온클릭 메서드 생성한 후 implement mothod 누르면 목록에서 고를 수 있음 
여기서 View는 모든 눈에 보이는 요소들의 부모 클래스에 해당한다. onClickdms 안드로이드 OS가 호출을 해 준다. 

 

 

package kr.co.button;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import kr.co.button.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());

        //버튼에 리스너 설정
        ButtonClickListener1 buttonClickListener1 = new ButtonClickListener1();
        activityMainBinding.button.setOnClickListener(buttonClickListener1);
        setContentView(activityMainBinding.getRoot());
    }
    //버튼 리스너 추가
    class ButtonClickListener1 implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            activityMainBinding.textView.setText("버튼 눌렀음");
        }
    }
}

 

 

 

버튼 하나에 리스너 하나를 써도 되지만 리스터 하나로 여러 버튼을 사용할 수도 있다

 

더보기

오류발생

 

//버튼 2와 버튼 3의 리스너
class ButtonClickListener2 implements View.OnClickListener{

    @Override
    public void onClick(View v) {
        //버튼2와 버튼3의 리스너로 등록
        //아이디로 버튼을 구분함
        int id = v.getId();
        switch (id){
            case R.id.button4:
                activityMainBinding.textView.setText("버튼2 눌렀음");
                break;
        }
    }

여기서 switch(id) { } 안의 case 문에서 Constant expression required 에러가 나는데 안드로이드 Gradle 플러그인 8.0.0 부터 최적화 된 빌드 속도를 위해서 R.id가 더이상 선언되지 않아서 발생하는 오류임 그래서 if문으로 바꿔줌 

 

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());


        //버튼 2와 버튼3의 리스너 설정
        ButtonClickListener2 buttonClickListener2 = new ButtonClickListener2();
        activityMainBinding.button4.setOnClickListener(buttonClickListener2);
        activityMainBinding.button5.setOnClickListener(buttonClickListener2);

    }
    
    //버튼 2와 버튼 3의 리스너
    class ButtonClickListener2 implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            //버튼2와 버튼3의 리스너로 등록
            //아이디로 버튼을 구분함
            int id = v.getId();
            if(id == R.id.button4) activityMainBinding.textView.setText("버튼 2 누름");
            else if(id == R.id.button5) activityMainBinding.textView.setText("버튼 3 누름");
        }
    }

 

728x90

'안드로이드 스튜디오' 카테고리의 다른 글

[Android] TextInputLayout  (0) 2025.12.19
[Android] EditText  (0) 2025.11.18
[Android] TextView  (0) 2025.11.15
[Android] MainActivity로 돌아오기 실습  (1) 2025.06.19
[Android] Activity  (1) 2025.06.17