Android Studio 0.4.5
Documentation Android pour la création de boîtes de dialogue personnalisées : http://developer.android.com/guide/topics/ui/dialogs.html
Si vous voulez une boîte de dialogue personnalisée, vous pouvez afficher une activité en tant que boîte de dialogue au lieu d'utiliser les API Dialog. Il suffit de créer une activité et de définir son thème sur Theme.Holo.Dialog dans l'élément manifeste "activity" :
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Cependant, lorsque j'ai essayé cela, j'ai obtenu l'exception suivante :
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Je supporte ce qui suit, et je ne peux pas utiliser quelque chose de plus grand que 10 pour le min :
minSdkVersion 10
targetSdkVersion 19
Dans mes styles, j'ai les éléments suivants :
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Et dans mon manifeste, j'ai ceci pour l'activité :
<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>
Créer la boîte de dialogue de cette manière était quelque chose que j'espérais faire, puisque j'ai déjà terminé la mise en page.
Quelqu'un peut-il me dire comment contourner ce problème ?
La raison pour laquelle vous rencontrez ce problème est que l'activité à laquelle vous essayez d'appliquer le thème de dialogue est une extension de ActionBarActivity
qui nécessite l'application du thème AppCompat
.
Mise à jour : Si vous étendez AppCompatActivity
, vous aurez également ce problème.
Dans ce cas, changez l'héritage Java de ActionBarActivity
en Activity
et laissez le thème de dialogue dans le manifeste tel qu'il est, une valeur non Theme.AppCompat
.
La règle générale est que si vous voulez que votre code supporte les anciennes versions d'Android, il doit avoir le thème AppCompat
et le code java doit étendre AppCompatActivity
. Si vous avez *une activité qui n'a pas besoin de ce support, par exemple si vous ne vous intéressez qu'aux dernières versions et fonctionnalités d'Android, vous pouvez lui appliquer n'importe quel thème mais le code java doit étendre le bon vieux Activity
.
NOTE : Lorsque vous passez de AppCompatActivity
(ou d'une sous-classe, ActionBarActivity
) à Activity
, vous devez également remplacer les différents appels avec "support" ; par l'appel correspondant sans "support" ;. Ainsi, à la place de getSupportFragmentManager
, appelez getFragmentManager
.
Le sdk minimum est de 10. ActionBar
est disponible à partir du niveau d'api 11. Donc pour 10, vous devez utiliser AppCompat
de la bibliothèque de support pour laquelle vous devez utiliser Theme.AppCompat
ou un descendant de celui-ci.
Utilisez
android:theme="@style/Theme.AppCompat" >
Ou si vous ne voulez pas de barre d'action en haut de la page
android:theme="@style/Theme.AppCompat.NoActionBar">
Plus d'infos @
http://developer.android.com/guide/topics/ui/actionbar.html
Édition :
J'ai peut-être mal lu le message de l'opérateur.
Il semble qu'il veuille une boîte de dialogue avec un thème d'activité. Donc, comme déjà suggéré par Bobbake4, étendez Activity
au lieu de ActionBarActivity
.
Jetez également un coup d'oeil aux attributs du dialogue dans le lien ci-dessous.
REMARQUE : j'avais prévu de répondre à cette question, mais des tests plus poussés ont révélé qu'elle échoue toujours lorsqu'elle est construite à l'aide de maven à partir de la ligne de commande, et j'ai donc dû la modifier pour en faire un problème !
Dans mon cas, lorsque j'ai eu cette erreur, j'utilisais déjà un thème AppCompat et l'erreur n'avait pas beaucoup de sens.
J'étais en train de maveniser mon build android. J'avais déjà des dépendances sur les versions apklib et jar de app compat, donc :
<!-- 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>
Maintenant, lorsque j'importe le projet maven et que je construis et exécute depuis IntelliJ, tout va bien.
Mais lorsque je construis, déploie et exécute à partir de la ligne de commande avec maven, j'obtiens toujours cette exception.