Appliquer un thème à une activité sous Android?

86

Je sais comment appliquer un thème à une application entière, mais où puis-je appliquer un thème à une seule activité?

Willy
la source

Réponses:

158

Vous pouvez appliquer un thème à n'importe quelle activité en incluant android:themeà l' <activity>intérieur du fichier manifeste.

Par exemple:

  1. <activity android:theme="@android:style/Theme.Dialog">
  2. <activity android:theme="@style/CustomTheme">

Et si vous souhaitez définir le thème par programme, utilisez-le setTheme()avant d'appeler setContentView()et de super.onCreate()méthode à l'intérieur de la onCreate()méthode.

Paresh Mayani
la source
1
Qu'en est-il du thème de désactivation? sur une seule activité
Yousha Aleayoub
@Yousha Aleayoub: avez-vous simplement essayé de définir un autre thème?
Yannick
Non, mais je veux juste désactiver / supprimer le thème et le rendre basique ... :)
Yousha Aleayoub
1
et en activité xml utilisation tools:context= ".YourAtivityName"dans la racine
Faisal Naseer
34

Pour le définir par programme dans Activity.java:

public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setTheme(R.style.MyTheme); // (for Custom theme)
  setTheme(android.R.style.Theme_Holo); // (for Android Built In Theme)

  this.setContentView(R.layout.myactivity);

Pour définir la portée de l'application dans Manifest.xml (toutes les activités):

 <application
    android:theme="@android:style/Theme.Holo"
    android:theme="@style/MyTheme">

Pour définir la portée de l'activité dans Manifest.xml (activité unique):

  <activity
    android:theme="@android:style/Theme.Holo"
    android:theme="@style/MyTheme">

Pour créer un thème personnalisé, vous devrez déclarer le thème dans le fichier themes.xml et définir les styles dans le fichier styles.xml.

l'amour en direct
la source
1
Qu'en est-il du thème de désactivation? sur une seule activité
Yousha Aleayoub
2
Pourquoi avez-vous ajouté deux android:themeattributs?
Flame of udun
@Vineet Kaushik, android:theme="@android:style/Theme.Holo"est la syntaxe pour ajouter un thème intégré Android. android:theme="@style/MyTheme"est la syntaxe pour ajouter un thème personnalisé décrit dans votre styles.xmlfichier. Dans votre AndroidManifest.xmlfichier actuel , vous n'utiliseriez que l'un ou l'autre pour chaque section, pas les deux.
Soren Stoutner
1
@Yousha Aleayoub, pour désactiver le thème, créez un thème vide dans styles.xmlpuis utilisez la syntaxe android:theme=@style/MyBlankTheme.
Soren Stoutner
Il semble que mettre plus d'un thème personnalisé dans le manifeste ne fonctionne pas. Si vous ajoutez un thème au niveau de l'application et un second au niveau de l'activité, seul celui de l'application est utilisé. J'ai essayé d'ajouter un thème pour chaque activité avec un "look" différent mais sans bon résultat.
Peter le
8

Avant d'appeler setContentView(), appelez setTheme(android.R.style...)et remplacez simplement le ... par le thème de votre choix (Theme, Theme_NoTitleBar, etc.).

Ou si votre thème est un thème personnalisé, remplacez le tout pour obtenir setTheme(yourThemesResouceId)

jcw
la source