개요
이 튜토리얼에서는 안드로이드에서 ListView 항목의 배경색을 변경하는 방법을 단계별로 살펴봅니다. 사용자가 리스트의 특정 항목을 탭하면 해당 항목의 배경색이 지정한 색상으로 바뀌도록 구현하는 것이 목표입니다.
1단계: 새 프로젝트 생성
Android Studio를 실행한 후 File ⇒ New Project 메뉴로 이동하여 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하고 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 전체를 채우는 ListView 하나를 배치하는 간단한 구조입니다.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/mobile_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
3단계: MainActivity 작성
src/MainActivity.java 파일에 아래 코드를 추가합니다. 여기서 핵심은 setOnItemClickListener()로 항목 클릭 이벤트를 감지하고, 클릭된 뷰(View)에 setBackgroundColor() 메서드를 호출해 배경색을 변경하는 부분입니다.
package app.tutorialspoint.com.sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
String[] mobileArray = {"Android", "IPhone", "WindowsMobile", "Blackberry",
"WebOS", "Ubuntu", "Windows7", "Max OS X"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView mobileList = findViewById(R.id.mobile_list);
ArrayAdapter adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, mobileArray);
mobileList.setAdapter(adapter);
mobileList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setBackgroundColor(getColor(R.color.colorPrimaryDark));
}
});
}
}
참고: getColor() 메서드는 API 23(마시멜로)부터 지원됩니다. 그 이전 버전을 지원해야 한다면 ContextCompat.getColor(context, R.color.colorPrimaryDark)를 대신 사용하세요.
4단계: AndroidManifest.xml 설정
androidManifest.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 옵션 목록에서 연결된 모바일 기기를 선택하세요.
앱이 실행되면 기본 화면에 모바일 OS 이름 목록이 표시됩니다. 이 상태에서 리스트의 항목을 탭하면 해당 항목의 배경색이 colorPrimaryDark 색상으로 즉시 변경되는 것을 확인할 수 있습니다.

추가 팁
- 클릭 시 색상이 아니라 원래 색으로 되돌리고 싶다면, 같은 항목을 다시 탭했을 때 조건문으로
Color.TRANSPARENT를 설정하면 토글 효과를 만들 수 있습니다. - 여러 항목을 동시에 선택 표시해야 하는 경우에는 어댑터에서 선택 상태를 관리하고
notifyDataSetChanged()로 갱신하는 방식이 더 안정적입니다. - 최신 안드로이드 개발에서는 ListView보다 성능과 유연성이 뛰어난 RecyclerView 사용이 권장되지만, 간단한 목록 UI에는 ListView도 여전히 유용하게 활용됩니다.