Πρέπει να χρησιμοποιήσετε ένα θέμα Theme.AppCompat (ή έναν απόγονο) με αυτή τη δραστηριότητα

Android Studio 0.4.5

Τεκμηρίωση Android για τη δημιουργία προσαρμοσμένων πλαισίων διαλόγου: http://developer.android.com/guide/topics/ui/dialogs.html

Αν θέλετε ένα προσαρμοσμένο παράθυρο διαλόγου, μπορείτε να εμφανίσετε μια Δραστηριότητα ως παράθυρο διαλόγου αντί να χρησιμοποιήσετε τα APIs Διαλόγου. Απλά δημιουργήστε μια δραστηριότητα και ορίστε το θέμα της σε Theme.Holo.Dialog στο το στοιχείο <activity> manifest element:

<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 για το min:

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, πρέπει επίσης να αλλάξετε τις διάφορες κλήσεις με "support" στην αντίστοιχη κλήση χωρίς "support". Έτσι, αντί για getSupportFragmentManager, καλέστε getFragmentManager.

Σχόλια (25)

min sdk είναι 10. Το ActionBar είναι διαθέσιμο από το επίπεδο api 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.

Ρίξτε επίσης μια ματιά στα Attributes του 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/

Σχόλια (8)

ΣΗΜΕΙΩΣΗ: Είχα την πρόθεση να το κάνω αυτό ως απάντηση, αλλά περαιτέρω δοκιμές αποκαλύπτουν ότι εξακολουθεί να αποτυγχάνει όταν χτίζεται χρησιμοποιώντας το maven από τη γραμμή εντολών, οπότε έπρεπε να το επεξεργαστώ για να είναι πρόβλημα! :-(

Στην περίπτωσή μου, όταν πήρα αυτό το σφάλμα, χρησιμοποιούσα ήδη ένα AppCompat Theme και το σφάλμα δεν'έβγαζε πολύ νόημα.

Ήμουν στη διαδικασία του mavenizing του android build μου. Είχα ήδη εξαρτήσεις από τις εκδόσεις apklib και jar του app compat, έτσι:



            android.support
            compatibility-v7-appcompat
            ${compatibility.version}
            apklib



            android.support
            compatibility-v7-appcompat
            jar



            android.support
            compatibility-v7
            jar



            android.support
            compatibility-v4

Τώρα, όταν εισάγω το έργο maven και κάνω build και run από το IntelliJ είναι μια χαρά.

Αλλά όταν χτίζω και αναπτύσσω και τρέχω από τη γραμμή εντολών με το maven εξακολουθώ να λαμβάνω αυτή την εξαίρεση.

Σχόλια (0)