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 |