COCO World
[Android/Kotlin] You need to use a Theme.AppCompat theme (or descendant) with this activity. 에러 대응 본문
[Android/Kotlin] You need to use a Theme.AppCompat theme (or descendant) with this activity. 에러 대응
코코월드주인장 2022. 12. 7. 10:07코드를 재빌드하는 과정에서 Manifest.xml이 삭제되는 상황이 발생했다.
매우 황당한 상황이라 당황함..
Tip.Manifest.xml 파일이 없어졌을때에는, app > New > other > Android Manifest File 생성을 통해 다시 만들어 주자!
(물론, 안에 코드들은 reset되어서 다시 채워줘야 한다.....울적)
위의 과정을 거치고 난 후 재빌드하고 났더니
You need to use a Theme.AppCompat theme (or descendant) with this activity. 에러가 발생!
에러가 난 위치는 Manifest.xml 에서 에 위치한 activity 안에서 theme 속성에서 error가 났다.
위의 에러를 만난 사람들은 보통 NoActionBar 속성을 적용하다가 저처럼 위의 에러가 발생한 경우가 많으실 거같다.
[1] Manifest.xml 과 themes.xml 정의되어있는 속성 일치하는지 다시 한번 확인해주기
<application
android:name=".MyApplication"
android:allowBackup="false"
android:fullBackupContent="false"
android:label="Test"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
tools:replace="android:allowBackup">
<activity
android:name=".MainActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
</activity>
</application>
[ 코드블럭1. Manifests.xml]
Manifest.xml 에서 문제가 되는 Activity 내에 android:theme="@style/AppTheme" 속성을 타고 들어가 확인해주도록 한다.
맥의 경우, 슬래시한 부분을 [command + 클릭] 또는 values 폴더의 themes.xml 파일 경로를 따라 들어가보자.
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/white</item>
<item name="colorPrimaryDark">@color/black</item>
<item name="colorAccent">@color/white</item>
<!-- No Title Bar-->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
[코드블럭2. theme.xml]
Manifest.xml 에서 Activity 안에 정의한 theme name="AppTheme"이 theme.xml에 제대로 정의되어있나 확인하고,
명명한 name명은 일치하는지 다시 한번 검토한다.
저는 sync하면서 여기에서 정의되어있는 <style> 내 몇몇 코드가 삭제되어있었다.
[2] MainActivity클래스에서 오버라이딩을 Activity()로 바꿔주기
package com.finger.testapp
class MainActivity : Activity() {
private lateinit var mainBinding: ActivityMainBinding
...
}
AppCompatActivity()를 상속받은 Activity에 NotitleBar 스타일 속성을 적용하면서 에러가 발생할 수 있는데,
AppCompatActivity()는 기본적으로 ActionBar 특징을 사용하기 위한 Activity이기 때문에 AppCompatActivity와 NotitleBar를
동시에 사용하면서 문제가 발생할 수 있다고 한다. 때문에 상속받는 부모를 Activity()로 바꿔준다.
그치만 AppCompatActivity는 굳이 NotitleBar를 위해서가 아니더라도 다른 라이브러리를 위해 상속받아 사용되기 때문에 그에 따라 다른 작성했던 다른 코드들이 영향받을 수 있으니 첫번째 방법에서 해결하자!
[결론]
1. Manifest.xml 에 선언한 style 속성명과 theme.xml 에 선언한 style 속성명과 일치하는지 확인하고, 빠진 코드가 없는지 검토하기
2. Theme을 적용한 Activity의 오버라이딩 해주는 클래스를 해당 Theme에 구애받지 않는 클래스로 바꿔주기
Tip.
Manifest.xml 파일이 없어졌을때에는, app > New > other > Android Manifest File 생성을 통해 다시 생성한다.
생성되는 경로는 app 폴더 > manifests 폴더 안에 AndroidManifest.xml 로 만들어준다.
'Android' 카테고리의 다른 글
[안드로이드/Android] 디자인패턴 MVP / MVC / MVVM 을 비교해보자. (0) | 2023.06.20 |
---|---|
[안드로이드/Kotlin] BottomNavigation Bar(바텀네비게이션바) 만들기 (0) | 2022.12.08 |
[Android/Kotlin]아이콘에 벡터이미지(svg파일)으로 가져와서 변환,적용하기 (0) | 2022.12.07 |