
안드로이드 어플리케이션을 만들 때 사용하는 Android Studio를 통해 UI 및 프론트에 대한 공부를 하며 그 내용들을 기록하고자 이렇게 글을 작성한다.
개발언어는 Java와 Kotlin 중 Java를 채택하여 학습하였다. Kotlin은 사용해 본 적이 없으나 Java의 경우 기본적인 기능들을 사용해 본 적이 있어 이를 선택하게 되었다.

UI구조는 저번과 동일하며, 저번에 수행한 상단의 여섯 개 버튼을 제외하고 나머지 버튼들을 구현하는 방법에 대해 알아볼 것이다.
우선 기본적으로 '이벤트'의 의미를 아는 것이 중요할 것이다.
여기서 말하는 이벤트란, 어플리케이션에서 일어나는 모든 것을 의미한다. 간단한 예시를 들면 현재 저 UI에 배치된 버튼을 사용자가 누르면 이는 이벤트에 속하는 것이다.
그리고 버튼들은 전부 이벤트가 발생할 때 각자 가지는 기능, 역할을 수행한다.
그렇다면 버튼들은 각자 이벤트가 발생하는 것을 감지(인지) 할 필요가 있고 이를 감지하는 역할을 가지는 것이 '이벤트 리스너'(Event Listener) 이다.
이벤트 리스너를 통해 이벤트를 처리하는 방법은 아래의 종류와 같다
이벤트 처리방법
- xml에서 onclick 사용하는 간단한 버튼 처리
- 리스너클래스 직접 내부에 만들어 처리
- 무명클래스: 리스너클래스 정의하지 말고 안에서 생성해 메소드만 사용
- 메인액티비티에서 이벤트리스너 인터페이스 구현(메인액티비티를 리스너로)
이를 바탕으로 자바 코드에서 이벤트를 처리하는 방법에 대해 이번에 직접 해 볼 것이다.
이번에 해 볼 버튼들은 저번에 사용했던 무명 클래스와 직접 리스너 클래스를 생성하는 방법을 사용해 볼 예정이다.
이번에는 초록, 민트, MyColor 버튼에 대해서 해당 버튼들이 이벤트를 처리하는 방법을 구현해 볼 것이다.
첫 번째로 초록 버튼을 처리해 보자. 초록 버튼은 텍스트뷰의 배경 색상을 초록색으로 변경 해 주는 버튼이며, 무명클래스를 통해 처리하는 방법을 사용한다.
Button btnGreen, btnMint, btnMycolor;
btnGreen = (Button) findViewById(R.id.button7);
우선 각 버튼들의 객체를 미리 생성해둔다. 그리고 지금 사용할 btnGreen 객체참조변수에 7번째 버튼을 할당한다.
btnGreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
txtDisplay2.setBackgroundColor(Color.GREEN);
}
});
//setBackgroundColor을 사용하면 텍스트뷰의 배경 색상 변경 가능
//Color.GREEN은 안드로이드 스튜디오에 기본적으로 존재하는 색상값
두 번째로는 민트 버튼을 처리할 것이다. 민트 버튼도 초록 버튼과 마찬가지로 처리하지만, 색상 변경을 수행하는 방식에서 차이가 있으므로 색상을 처리하는 방법에 중점을 두어 알아볼 것이다.
// 민트색 배경 버튼
btnMint = (Button) findViewById(R.id.button8);
btnMint.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// RGB컬러를 문자열로 지정하는 방법은 두 가지임
// 1. txtDisplay2.setBackgroundColor(Color.parseColor("#DCFFFA"));
txtDisplay2.setBackgroundColor(Color.rgb(220, 255,250));
}
});
Color.GREEN 을 사용해 배경 색상을 설정했으나 설정 방법은 이보다 더 다양하다
- 안드로이드 스튜디오에 이미 있는 색상값 (
Color)을 활용Color.parseColor을 이용해 컬러코드로 색상값 입력Color.rgb(r,g,b)를 이용해 rgb값으로 색상 선택
마지막 세 번째 버튼의 구현은 앞서 설명한 두 버튼과 구현이 약간 다르게 수행된다.
btnMycolor = (Button) findViewById(R.id.button9);
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="mycolor">#FFB83E</color>
</resources>
btnMycolor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 해당 방법은 컬러 리소스(color.xml)을 가져와 사용하는 방법, 리소스의 컬러를 값으로 정의해야 함
int color = getResources().getColor(R.color.mycolor);
txtDisplay2.setBackgroundColor(color);
}
});
//int color에 color.xml에 생성해 둔 mycolor의 값을 불러와 색상을 설정하도록 만든다.
getResources()는 res폴더에 있는 리소스를 활용한다는 것getColor()은 리소스에 존재하는 color 리소스를 가져온다는 것여기서는 앞의 두 버튼과 다르게 컬러 리소스를 color.xml에 미리 생성한 후, 만들어 둔 컬러 리소스를 활용하는 점에서 앞의 버튼들과 좀 다르다고 볼 수 있다.
이 방법을 사용한다면 자주 사용하는 컬러값에 대해서 리소스로 따로 분리해 저장해 둔 후 재사용하기 편리하다는 점에서 장점이라고 볼 수 있다.
이번에는 텍스트를 정렬하는 위, 중간, 아래 버튼에 대해서 해당 버튼들이 이벤트를 처리하는 방법을 구현해 볼 것이다.
텍스트 정렬 버튼을 위해서 리스너 클래스를 직접 정의 해 활용할 것이다.
구현 과정은 아래와 같다.
btnTop = (Button) findViewById(R.id.button10);
btnCenter = (Button) findViewById(R.id.button11);
btnBottom = (Button) findViewById(R.id.button12);
public class TextAlignClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
// 매개변수 view: 버튼 정보를 의미
int viewId = view.getId();
if (viewId == R.id.button10) {
// R.id.button10에 대한 처리
txtDisplay2.setGravity(Gravity.TOP);
} else if (viewId == R.id.button11) {
// R.id.button11에 대한 처리
txtDisplay2.setGravity(Gravity.CENTER);
} else if (viewId == R.id.button12) {
// R.id.button12에 대한 처리
txtDisplay2.setGravity(Gravity.BOTTOM);
}
}
}
// setGravity(): 정렬기준을 설정하는 메소드
// 텍스트를 정렬하는 것이므로 TextAlignClickListener이라는 이름 부여
// int viewId에 클릭된 뷰의 ID값을 가져오는 getId()를 사용해 클릭된 뷰의 ID값 할당
btnTop.setOnClickListener(new TextAlignClickListener());
btnCenter.setOnClickListener(new TextAlignClickListener());
btnBottom.setOnClickListener(new TextAlignClickListener());
이번에는 새로운 리스너 클래스를 직접 만들어서 정렬을 수행하는 버튼을 구현했다. 새로운 리스너 클래스 속에서는 getId()를 이용해 ID를 받아오고, 받아온 ID값을 이용해 어떤 버튼이 눌렸는지 구분하여 정렬을 어떻게 수행할 지를 선택하는 리스너 클래스를 생성했다.
이렇게 하면 완벽히 세 버튼을 위한 리스너 클래스를 생성한 것이므로 클래스 하나를 이용해 세 버튼을 처리할 수 있다.
이번 연습을 통해서 리스너 클래스를 활용하는 다양한 상황에 대해서 연습 해 볼 수 있었다. 다음번에는 다른 기능을 활용하는 법을 연습할 예정이다.
리스너 클래스는 다양한 이벤트를 처리하기 위해선 기본적인 구조이기에 암기하지는 않더라도 안드로이드 스튜디오를 활용하기 위해선 그 기본 구조를 잊어서는 안될 것으로 보인다.