이 활동과 함께 Theme.AppCompat 테마 (또는 자손)를 사용해야합니다. (or descendant) with

안드로이드 스튜디오 0.4.5

사용자 정의 대화 상자 작성을위한 Android 문서 : http://developer.android.com/guide/topics/ui/dialogs.html

사용자 정의 대화 상자를 원하면 대신 대화 API를 사용하는 대신 활동을 대화 상자로 표시 할 수 있습니다. 간단히 액티비티를 만들고 <activity>매니페스트 요소 에서 테마를 Theme.Holo.Dialog로 설정하십시오 .

<activity android:theme="@android:style/Theme.Holo.Dialog" >

그러나 이것을 시도했을 때 다음 예외가 발생합니다.

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

다음을 지원하고 있으며 분에 10보다 큰 것을 사용할 수 없습니다.

minSdkVersion 10
targetSdkVersion 19

내 스타일에는 다음이 있습니다.

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

그리고 내 매니페스트에서 활동에 대해 이것을 가지고 있습니다.

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

레이아웃을 이미 완료 했으므로 이와 같은 대화 상자를 만드는 것은 내가 바랐던 일이었습니다.

누구 든지이 문제를 해결할 수있는 방법을 말해 줄 수 있습니까?



답변

이 문제가 발생하는 이유는 대화 상자 테마를 적용하려는 활동이 확장 ActionBarActivity되어 AppCompat테마를 적용 해야 하기 때문입니다.

업데이트 : 확장 AppCompatActivity하면이 문제가 발생합니다

이 경우 Java 상속을에서 ActionBarActivity로 변경하고 Activity대화 상자 테마를 Theme.AppCompat값 이 아닌 매니페스트에 그대로 둡니다.


일반적인 규칙은 코드가 이전 버전의 Android를 지원하도록하려면 AppCompat테마가 있고 Java 코드가 확장되어야한다는 것 AppCompatActivity입니다. Android의 최신 버전 및 기능에만 관심이있는 것과 같이이 지원이 필요없는 활동이있는 경우 테마를 적용 할 수 있지만 Java 코드는 일반 이전으로 확장해야합니다 Activity.


참고 : AppCompatActivity(또는 서브 클래스 ActionBarActivity) 에서 (으 )로 Activity변경하는 경우 “지원”이있는 다양한 통화도 “지원”이 없는 해당 통화로 변경해야합니다 . 따라서 대신에을 getSupportFragmentManager호출하십시오 getFragmentManager.


답변

파일 android:theme="@style/Theme.AppCompat.Light"의 응용 프로그램 태그에 추가 하기 만하면 AndroidManifest.xml됩니다.


답변

위의 주석에서 @MarkKeen의 답변을 복사하면 동일한 문제가 발생합니다.

게시물 상단에 오류가 표시되어 경고 대화 상자를 추가 한 후 발생했습니다. 매니페스트에 모든 관련 스타일 정보가 있습니다. 경고 빌더에서 컨텍스트 참조를 변경하여 문제점을 해결했습니다.

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

에:

new android.support.v7.app.AlertDialog.Builder(this)

그리고 더 이상 문제가 없습니다.


답변

min sdk is 10. ActionBarapi level 11에서 사용할 수 있습니다. 따라서 10의 AppCompat경우 지원 라이브러리에서 사용 Theme.AppCompat하거나 같은 하위 항목 을 사용해야 합니다.

사용하다

android:theme="@style/Theme.AppCompat" >

또는 상단에 작업 표시 줄을 원하지 않으면

android:theme="@style/Theme.AppCompat.NoActionBar">

더 많은 정보 @

http://developer.android.com/guide/topics/ui/actionbar.html

편집하다:

op post를 잘못 읽었을 수 있습니다.

op가 활동 테마가있는 대화 상자를 원하는 것 같습니다. 따라서 Bobbake4가 이미 제안한대로 Activity대신 대신 확장하십시오 ActionBarActivity.

아래 링크에서 @ Dialog 속성을 살펴보십시오.

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


답변

다음과 같이 애플리케이션 컨텍스트를 사용중인 경우 :

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

다음과 같은 활동 컨텍스트로 변경하십시오.

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);


답변

내 테마가 AppCompat테마이고 내 활동이 AppCompatActivity(또는 Activity다른 답변에서 제안한대로) 이 문제가 발생했습니다 . 그래서 프로젝트를 정리하고 다시 빌드하고 다시 실행했습니다.

( 빌드-> 프로젝트 정리; 빌드-> 프로젝트 다시 빌드; 실행-> 실행 )

바보처럼 보이지만 이제는 잘 작동합니다 !

그것이 도움이되기를 바랍니다!


답변

이것이 나를 위해 고쳐 놓은 것입니다 : 매니페스트에서 테마를 지정하는 대신 onCreate확장되는 각 활동 에 대해 정의했습니다 ActionBarActivity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

다음 MyAppTheme은의 자손이며 Theme.AppCompatxml에 정의되어 있습니다. 테마는 super.onCreate및 이전에 설정되어야합니다 setContentView.