it-swarm-id.com

Anda perlu menggunakan tema Theme.AppCompat (atau keturunan) dengan aktivitas ini

Android Studio 0.4.5

Dokumentasi Android untuk membuat kotak dialog khusus: http://developer.Android.com/guide/topics/ui/dialogs.html

Jika Anda menginginkan dialog khusus, Anda dapat menampilkan Aktivitas sebagai dialog alih-alih menggunakan Dialog API. Cukup buat aktivitas dan setel temanya ke Theme.Holo.Dialog di Elemen manifes <activity>:

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

Namun, ketika saya mencoba ini saya mendapatkan pengecualian berikut:

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

Saya mendukung yang berikut ini, dan saya tidak bisa menggunakan sesuatu yang lebih besar dari 10 untuk min:

minSdkVersion 10
targetSdkVersion 19

Dalam gaya saya, saya memiliki yang berikut:

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

Dan dalam manifes saya, saya memiliki ini untuk kegiatan:

 <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>

Membuat kotak dialog seperti ini adalah sesuatu yang ingin saya lakukan, karena saya sudah menyelesaikan tata letak.

Adakah yang bisa memberitahu saya bagaimana saya bisa mengatasi masalah ini?

848
ant2009

Alasan Anda mengalami masalah ini adalah karena aktivitas yang Anda coba terapkan pada tema dialog adalah memperluas ActionBarActivity yang mengharuskan tema AppCompat diterapkan. 

Perbarui : Memperluas AppCompatActivity juga akan memiliki masalah ini 

Dalam hal ini, ubah warisan Java dari ActionBarActivity menjadi Activity dan biarkan tema dialog dalam manifes apa adanya, bukan nilai Theme.AppCompat 


Aturan umumnya adalah jika Anda ingin kode Anda mendukung versi Android yang lebih lama, itu harus memiliki tema AppCompat dan kode Java harus memperluas AppCompatActivity. Jika Anda memiliki * suatu kegiatan yang tidak memerlukan dukungan ini, seperti Anda hanya peduli dengan versi dan fitur Android terbaru, Anda dapat menerapkan tema apa pun untuknya, tetapi kode Java harus lebih lama Activity.


CATATAN: Ketika mengubah dari AppCompatActivity (atau subclass, ActionBarActivity), menjadi Activity, juga harus mengubah berbagai panggilan dengan "dukungan" ke panggilan yang sesuai tanpa "dukungan". Jadi, alih-alih getSupportFragmentManager, panggil getFragmentManager.

1028
Bobbake4

Yang perlu Anda lakukan adalah menambahkan Android:theme="@style/Theme.AppCompat.Light" ke tag aplikasi Anda di file AndroidManifest.xml.

495
iusting

Menyalin jawaban dari @ MarkKeen di komentar di atas karena saya memiliki masalah yang sama.

Saya memiliki kesalahan yang dinyatakan di bagian atas posting dan terjadi setelah saya menambahkan dialog peringatan. Saya memiliki semua informasi gaya yang relevan di manifes. Masalah saya disembuhkan dengan mengubah referensi konteks di pembangun lansiran - Saya mengubah: 

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

untuk: 

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

Dan tidak ada lagi masalah.

211
A.K.

min sdk adalah 10. ActionBar tersedia dari api level 11. Jadi untuk 10 Anda akan menggunakan AppCompat dari perpustakaan dukungan yang Anda perlukan untuk menggunakan Theme.AppCompat atau turunan dari yang sama.

Menggunakan

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

Atau jika Anda tidak ingin panel tindakan di bagian atas

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

Info lebih lanjut @

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

Edit:

Saya mungkin salah membaca pos operasi.

Tampaknya op ingin Dialog dengan Tema Aktivitas. Jadi seperti yang sudah disarankan oleh Bobbake4 memperpanjang Activity bukan ActionBarActivity.

Juga lihat Atribut Dialog di tautan di bawah ini

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

88
Raghunandan

Ini bekerja untuk saya, saya baru saja mengubah:

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

untuk ini:

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

Saya mengalami masalah ini meskipun Tema saya adalah AppCompat Tema dan Kegiatan saya adalah AppCompatActivity (atau Activity, seperti yang disarankan pada jawaban orang lain). Jadi saya membersihkan, membangun kembali, dan menjalankan kembali proyek. 

( Build -> Clean Project; Build -> Rebuild Project; Run -> Run )

Kelihatannya bodoh, tapi sekarang bekerja dengan baik !

Semoga bermanfaat!

36
Geraldo Neto

Inilah yang diperbaiki untuk saya: alih-alih menentukan tema dalam manifes, saya mendefinisikannya dalam onCreate untuk setiap aktivitas yang meluas ActionBarActivity:

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

Di sini MyAppTheme adalah turunan dari Theme.AppCompat, dan didefinisikan dalam xml. Perhatikan bahwa tema harus diset sebelum super.onCreate dan setContentView.

24
k29

pergi ke gaya Anda dan taruh orang tua

parent="Theme.AppCompat"

dari pada 

parent="@Android:style/Theme.Holo.Light"
19
Yamen Nassif

Dalam kasus saya, saya tidak memiliki file nilai-v21 di direktori res saya. Kemudian saya membuatnya dan menambahkan di dalamnya kode berikut:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
16
Ali Gürelli

Ubah tema Kegiatan yang diinginkan. Ini bekerja untuk saya:

<activity
            Android:name="HomeActivity"
            Android:screenOrientation="landscape"
            Android:theme="@style/Theme.AppCompat.Light"
            Android:windowSoftInputMode="stateHidden" />
13
sharma_kunal

Jika Anda perlu memperpanjang ActionBarActivity yang Anda butuhkan di style.xml Anda:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

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

Jika Anda menetapkan tema utama aplikasi Anda sebagai Android: Theme.Material.Light alih-alih AppTheme.Base maka Anda akan mendapatkan "IllegalStateException: Anda perlu menggunakan tema Theme.AppCompat (atau keturunan) dengan ini kesalahan aktivitas ”.

13
JonasOliveira

Saya mengalami crash pada Samsung perangkat meskipun aktivitasnya menggunakan Theme.AppCompat . Penyebab utama terkait dengan optimasi aneh di sisi Samsung:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `Android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

Solusi saya hanya menghapus Android:launchMode="singleTask"

12
goRGon

Saya memiliki masalah yang sama, tetapi diselesaikan ketika saya menempatkan ini pada manifes: Android: theme = "@ style/Theme.AppCompat.

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/icon"
        Android:label="@string/app_name_test"
        Android:supportsRtl="true"
        Android:theme="@style/Theme.AppCompat">

        ...    

    </application>
12
Marc Baduq

Kerjakan saja

new AlertDialog.Builder(this)

Dari pada

new AlertDialog.Builder(getApplicationContext())
9
Ali Akram

bagi saya solusi untuk menggunakan ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new Android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

from Android - Bagaimana cara membuat FAB secara terprogram?

7
Peter

Ubah induk gaya tema Anda menjadi 

 parent="Theme.AppCompat"

Ini bekerja untuk saya ...

6
Fazal

Di Android manifes, cukup ubah tema aktivitas menjadi AppTheme sebagai ikuti cuplikan kode

<activity
  Android:name=".MainActivity"
  Android:label="@string/app_name"
  Android:theme="@style/AppTheme">
</activity>
6
shikha

Saya punya masalah ini juga dan apa yang saya lakukan untuk memperbaikinya, DAN masih menggunakan tema Holo adalah untuk mengambil langkah-langkah ini:

pertama saya mengganti impor ini:

import Android.support.v7.app.AppCompatActivity;

dengan yang ini:

import Android.app.Activity;

lalu ubah ekstensi saya dari:

public class MyClass extends AppCompatActivity {//...

untuk ini:

public class MyClass extends Activity {//...

Dan juga harus mengubah impor ini:

import Android.support.v7.app.AlertDialog;

untuk impor ini:

import Android.app.AlertDialog;

dan kemudian Anda dapat menggunakan tag tema Anda dalam manifes di tingkat aktivitas:

Android:theme="@Android:style/Theme.Holo.Dialog" />

dan terakhir, (kecuali jika Anda memiliki kelas lain di proyek Anda yang harus menggunakan v7 appCompat) Anda bisa membersihkan dan membangun kembali proyek Anda atau menghapus entri ini dalam file build gradle di tingkat aplikasi:

compile 'com.Android.support:appcompat-v7:23.2.1'

jika Anda memiliki kelas lain di proyek Anda yang harus menggunakan v7 appCompat maka bersihkan dan bangun kembali proyek.

6
Wraithious

Ini adalah saat Anda menginginkan AlertDialog dalam sebuah Fragmen 

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();
6
Avinash_ks

Anda memiliki banyak solusi untuk kesalahan itu.

  1. Anda harus menggunakan Activity atau FragmentActivity bukannya ActionbarActivity atau AppCompatActivity

  2. Jika Anda ingin menggunakan ActionbarActivity atau AppCompatActivity , Anda harus mengubah di styles.xml Theme.Holo.xxxx ke Theme.AppCompat.Light (jika perlu tambahkan ke DarkActionbar )

Jika Anda tidak memerlukan atribut lanjutan tentang bilah tindakan atau AppCompat Anda tidak perlu menggunakan Actionbar atau AppCompat .

6
Kaloglu

Yang ini bekerja untuk saya:

<application
           Android:allowBackup="true"
           Android:icon="@mipmap/ic_launcher"
           Android:label="@string/app_name"
           Android:theme="@style/AppTheme" >
           <activity
               Android:name=".MainActivity"
               Android:label="@string/app_name"
               Android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action Android:name="Android.intent.action.MAIN" />

                   <category Android:name="Android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>
5
user1501382

Aktivitas Anda memperluas ActionBarActivity yang memerlukan AppCompat.theme untuk diterapkan . Ubah dari ActionBarActivity ke Aktivitas atau FragmentActivity , itu akan menyelesaikan masalah. 

Jika Anda tidak menggunakan bilah Tindakan, maka:

Android:theme="@Android:style/Theme.Light.NoTitleBar.Fullscreen" 
5

Anda telah mencapai hal ini karena Anda ingin menerapkan Desain Bahan dalam gaya tema Anda di versi SDK sebelumnya ke 21. ActionBarActivity membutuhkan AppThemeso jika Anda juga ingin mencegah kustomisasi Anda sendiri tentang AppTheme Anda, hanya Anda yang harus mengubah gaya Anda.xml ( sebelumnya ke sdk 21) jadi dengan cara ini, dapat mewarisi tema App Compat.

<style name="AppTheme" parent="Android:Theme.Holo.Light.DarkActionBar">

untuk ini:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
5
danigonlinea

Dalam pengalaman saya, masalahnya adalah konteks di mana saya menunjukkan dialog saya . Di dalam tombol klik saya instantiate AlertDialog dengan cara ini:

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

Tetapi konteksnya tidak benar dan menyebabkan kesalahan. Saya telah mengubahnya menggunakan konteks aplikasi dengan cara ini:

Di bagian menyatakan:

Context mContext;

dalam metode onCreate

mContext = this;

Dan akhirnya dalam kode di mana saya membutuhkan AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

Ini solusinya buat saya.

4
Dante

Saya memiliki aktivitas dengan tema <Android:theme="@Android:style/Theme.Dialog"> yang digunakan untuk menampilkan dialog di appWidget dan saya memiliki masalah yang sama

saya memecahkan kesalahan ini dengan mengubah kode aktivitas seperti di bawah ini:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}
4
Elyas Nategh

Solusi cepat.

Ubah induk tema dasar Anda di styles.xml

Ganti dari

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

untuk

<style name="AppTheme" parent="Theme.AppCompat">
4
Kaloglu

Dalam kasus saya, masalah seperti itu muncul ketika saya mencoba untuk menampilkan Dialog ... Masalahnya adalah dalam konteks, saya telah menggunakan getBaseContext () yang secara teoritis harus mengembalikan konteks Aktivitas, tetapi tampaknya tidak, atau mengembalikan konteks sebelum Tema apa pun diterapkan.

Jadi saya baru saja mengganti getBaseContexts () dengan " this ", dan sekarang berfungsi seperti yang diharapkan.

        Dialog.showAlert(this, title, message,....);
3
Vitaliy A

Dalam kasus saya, saya menggembungkan tampilan dengan ApplicationContext. Ketika Anda menggunakan ApplicationContext, tema/gaya tidak diterapkan, jadi meskipun ada Theme.Appcompat dalam gaya saya, itu tidak diterapkan dan menyebabkan pengecualian ini. Lebih detail: Tema/Gaya tidak diterapkan ketika inflater digunakan dengan ApplicationContext

3
Murat

Bagi saya tidak ada jawaban di atas yang berfungsi bahkan setelah saya memiliki Theme.AppCompat sebagai tema dasar saya untuk aplikasi tersebut. Saya menggunakan com.Android.support:design:24.1.0 Jadi saya baru saja mengubah versinya menjadi 24.1.1. Setelah sinkronisasi gradle, ini berfungsi lagi dan pengecualian hilang. Menurut saya masalahnya adalah dengan beberapa versi yang lebih lama dari perpustakaan dukungan desain.

Hanya menempatkan ini di sini kalau-kalau jawaban lain tidak bekerja untuk beberapa orang.

3
Sharp Edge

Saya mendapatkan masalah yang sama. Karena saya sedang membuat laci navigasi khusus. Tapi saya lupa menyebutkan tema dalam manifes saya seperti ini

Android: theme = "@ style/Theme.AppCompat.NoActionBar"

Segera saya menambahkan tema di atas ke manifes saya untuk menyelesaikan masalah.

3
Azhar osws

Solusi ini bekerja untuk saya. 

Pustaka desain tergantung pada Dukungan v4 dan Pustaka Dukungan AppCompat, jadi jangan gunakan versi yang berbeda untuk appcompat dan pustaka desain secara bertahap.

menggunakan 

 compile 'com.Android.support:appcompat-v7:23.0.0'
 compile 'com.Android.support:design:23.0.0'

dari pada

 compile 'com.Android.support:appcompat-v7:23.0.0'
 compile 'com.Android.support:design:23.1.0'
3
kiran boghra

Aktivitas Saya dengan SectionsPagerAdapter dan ViewPager & Fragment

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }
2
valera

Ini benar-benar memaksa saya untuk mengirim jawaban saya sendiri. Karena saya menggunakan Theme.AppCompat.Light.NoActionBar dan juga mengganti semua AlertDialog dengan dukungan impor compat dan masih menghadapi masalah di bawah v21 (Lollipop) . Saya tidak suka ide untuk mengubah tema yang tepat . Jadi setelah 2 hari saya akhirnya memikirkan perpustakaan lain yang menentukan AppTheme untuk AndroidManifest.xml mereka, ya ada satu -> "Perpustakaan pgsdk PayTM" . Jadi perubahan berikut memperbaiki masalah.

  1. Mengganti nama 'AppTheme' yang digunakan untuk aplikasi saya menjadi 'XYZAppTheme'
  2. menggunakan alat: ganti metode di AndroidManifest proyek saya (aplikasi).

    <uses-permission Android:name="Android.permission.INTERNET" />
    
    <application
        Android:name=".XYZ"
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher_v2"
        Android:label="@string/app_name"
        Android:largeHeap="true"
        Android:roundIcon="@mipmap/ic_launcher_v2_round"
        Android:supportsRtl="true"
        Android:theme="@style/XYZAppTheme"
        tools:replace="Android:icon,Android:theme">
    
        <activity
            Android:name=".xyz.SplashActivity"
            Android:launchMode="singleTask"
            Android:screenOrientation="portrait">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
    
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

2
Amit Tumkur

Bagi saya masalah diselesaikan dengan mengubah warisan dari AppCompatActivity ke Aktivitas di kelas customDialog saya. Tidak diperlukan perubahan dalam manifes untuk Theme.Dialog. 

2
Kedar

Jika menggunakan getApplicationContext () sebagai parameter saat menggembungkan tata letak, Anda dapat mencoba menggunakan getBaseContext (). misalnya 

    View.inflate(getBaseContext(),
            getLayoutId() == 0 ? R.layout.page_default : getLayoutId(),
            null);
2
user1744585

Ubah Tema dari tab yang disorot di gambar.  enter image description here

2
saleem kalro

Di Android Studio: Tambahkan perpustakaan dukungan ke file gradle dan sinkronkan . Edit build.gradle (Module: app) untuk memiliki dependensi sebagai berikut:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'
compile 'com.Android.support:support-v4:23.1.1'
}

Dukungan saya Versi perpustakaan adalah 23.1.1; Gunakan versi perpustakaan dukungan Anda sebagaimana berlaku.

1
CodeBulls Inc.

Dalam kasus saya, saya menggunakan gaya yang disebut "FullScreenTheme", dan meskipun tampaknya didefinisikan dengan benar (itu adalah turunan dari Theme.AppCompat) itu tidak berfungsi.

Saya akhirnya menyadari bahwa saya menggunakan perpustakaan AAR yang secara internal juga telah mendefinisikan gaya yang disebut "FullScreenTheme" dan itu bukan keturunan Theme.AppCompat. Bentrok nama-nama itu menyebabkan masalah.

Perbaiki dengan mengganti nama gaya saya sendiri sehingga sekarang Android menggunakan gaya yang benar.

1
tomacco

CATATAN: Saya bermaksud ini sebagai jawaban, tetapi pengujian lebih lanjut mengungkapkan itu masih gagal ketika dibangun menggunakan pakar dari baris perintah, jadi saya harus mengeditnya menjadi masalah! :-(

Dalam kasus saya ketika saya mendapatkan kesalahan ini saya sudah menggunakan Tema AppCompat dan kesalahan itu tidak masuk akal.

Saya sedang dalam proses merombak build Android saya. Saya sudah memiliki ketergantungan pada versi apklib dan jar dari aplikasi compat, dengan demikian:

    <!-- See https://github.com/mosabua/maven-Android-sdk-deployer -->
        <dependency>
            <groupId>Android.support</groupId>
            <artifactId>compatibility-v7-appcompat</artifactId>
            <version>${compatibility.version}</version>
            <type>apklib</type>
        </dependency>

        <dependency>
            <groupId>Android.support</groupId>
            <artifactId>compatibility-v7-appcompat</artifactId>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>Android.support</groupId>
            <artifactId>compatibility-v7</artifactId>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>Android.support</groupId>
            <artifactId>compatibility-v4</artifactId>
        </dependency>

Sekarang, ketika saya mengimpor proyek pakar dan membangun dan menjalankan dari IntelliJ baik-baik saja.

Tetapi ketika saya membangun dan menggunakan dan menjalankan dari baris perintah dengan pakar saya masih mendapatkan pengecualian ini.

1
Andrew Mackenzie

Di app/build.gradle Anda, tambahkan dependensi ini:

implementation "com.google.Android.material:material:1.1.0-alpha03"

Perbarui styles.xml induk AppTheme Anda:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"/>
0
Mark Pazon