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
.
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 στον παρακάτω σύνδεσμο
ΣΗΜΕΙΩΣΗ: Είχα την πρόθεση να το κάνω αυτό ως απάντηση, αλλά περαιτέρω δοκιμές αποκαλύπτουν ότι εξακολουθεί να αποτυγχάνει όταν χτίζεται χρησιμοποιώντας το maven από τη γραμμή εντολών, οπότε έπρεπε να το επεξεργαστώ για να είναι πρόβλημα! :-(
Στην περίπτωσή μου, όταν πήρα αυτό το σφάλμα, χρησιμοποιούσα ήδη ένα AppCompat Theme και το σφάλμα δεν'έβγαζε πολύ νόημα.
Ήμουν στη διαδικασία του mavenizing του android build μου. Είχα ήδη εξαρτήσεις από τις εκδόσεις apklib και jar του app compat, έτσι:
<!-- 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>
Τώρα, όταν εισάγω το έργο maven και κάνω build και run από το IntelliJ είναι μια χαρά.
Αλλά όταν χτίζω και αναπτύσσω και τρέχω από τη γραμμή εντολών με το maven εξακολουθώ να λαμβάνω αυτή την εξαίρεση.