안드로이드 스튜디오 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. ActionBar
api 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 속성을 살펴보십시오.
답변
다음과 같이 애플리케이션 컨텍스트를 사용중인 경우 :
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.AppCompat
xml에 정의되어 있습니다. 테마는 super.onCreate
및 이전에 설정되어야합니다 setContentView
.