목차
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 만 변경하고 테마를 변경하지 않을 경우 발생하는 에러입니다.