Activity 를 AppCompatActivity 로 전환

Activity 변경

안드로이드 어플을 작성하다 보면 타이틀바의 모양을 변경하거나 타이틀바에 메뉴를 추가해야 하는 경우가 있습니다. 이럴 경우 Activity 와 테마 변경만으로 모든 작업을 완료할 수 있습니다.

참고로 AppCompatActivity 는 Activity 를 상속받은 클래스로 타이틀바의 다양한 기능을 쉽게 사용할수 있게 해줍니다.

환경: Android Version : 3.1

Activity 화면

AppCompatActivity

MainActivity.java 에서 변경

public class MainActivity extends Activity  를
public class MainActivity extends AppCompatActivity  로 변경합니다.

import android.support.v7.app.AppCompatActivity; 추가합니다.

import android.support.v7.app.AppCompatActivity;

........

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

// 액션바 라벨 수정 
getSupportActionBar().setTitle("ACTIONBAR");
//액션바 배경색 변경
 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xFF339999));
//홈버튼 표시
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    }
}

 

 

Android Support Library 설치

기존에는 SDK Manager 에서 버전에 맞는 SDK 를 찾아 설치를 해야했는데,
최신버전에서는 build.gradle 파일에 아래와 같이 내용을 추가하면 됩니다.

dependencies {
    compile 'com.android.support:appcompat-v7:25.3.1'
}

 

styles.xml 수정 및 생성

value 폴더에 styles.xml 파일을 수정합니다. 만약 파일이 없다면 생성해줍니다.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.ActionBar">
        <item name="windowActionBar">true</item>
        <item name="windowNoTitle">false</item>
    </style>
 
</resources>

 

 

AndroidManifest.xml

AndroidManifest.xml 에서 아래와 같이 테마를 추가(또는 변경)합니다.
AppTheme.ActionBar 는 액션바를 사용, AppTheme.NoActionBar 는 액션바를 사용하지 않습니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="eee.eee.whiteat"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
            android:allowBackup="true"
            android:theme="@style/AppTheme"
            android:label="@string/app_name">
        <activity
             android:name=".ClientActivity"
              android:label="@string/app_name"
          android:theme="@style/AppTheme.ActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

    </application>
</manifest> 

 

 

에러 종류

You need to use a Theme.AppCompat theme (or descendant) with this activity

AppCompatActivity 만 변경하고 테마를 변경하지 않을 경우 발생하는 에러입니다.

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다