Aplicar um tema a uma atividade no Android?

86

Eu sei como aplicar um tema a um aplicativo inteiro, mas onde iria para aplicar um tema a apenas uma atividade?

Willy
fonte

Respostas:

158

Você pode aplicar um tema a qualquer atividade incluindo android:themedentro do <activity>arquivo de manifesto.

Por exemplo:

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

E se você quiser definir o tema programaticamente, use o método setTheme()antes de chamar setContentView()e super.onCreate()dentro do onCreate()método.

Paresh Mayani
fonte
1
Que tal desativar o tema? em uma única atividade
Yousha Aleayoub
@Yousha Aleayoub: você tentou definir outro tema?
Yannick,
Não, mas eu só quero desativar / remover o tema e torná-lo básico ... :)
Yousha Aleayoub
1
e em atividade xml use tools:context= ".YourAtivityName"na raiz
Faisal Naseer
34

Para defini-lo programaticamente em 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);

Para definir no escopo do aplicativo em Manifest.xml (todas as atividades):

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

Para definir o escopo da atividade em Manifest.xml (atividade única):

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

Para construir um tema customizado, você terá que declarar o tema no arquivo themes.xml e definir estilos no arquivo styles.xml.

amor ao vivo
fonte
1
Que tal desativar o tema? em uma única atividade
Yousha Aleayoub
2
Por que você adicionou dois android:themeatributos?
Chama de udun
@Vineet Kaushik, android:theme="@android:style/Theme.Holo"é a sintaxe para adicionar um tema integrado ao Android. android:theme="@style/MyTheme"é a sintaxe para adicionar um tema personalizado descrito em seu styles.xmlarquivo. Em seu AndroidManifest.xmlarquivo real, você usaria apenas um ou outro para cada seção, não ambos.
Soren Stoutner
1
@Yousha Aleayoub, para desativar o tema, crie um tema em branco styles.xmle use a sintaxe android:theme=@style/MyBlankTheme.
Soren Stoutner
Parece que colocar mais de um tema personalizado no manifesto não funciona. Se você adicionar um tema no nível do aplicativo e um segundo no nível da atividade, apenas o do aplicativo será usado. Tentei adicionar um tema para cada atividade com um "visual" diferente, mas sem bom resultado.
Peter
8

Antes de chamar setContentView(), chame setTheme(android.R.style...)e apenas substitua o ... pelo tema que deseja (Theme, Theme_NoTitleBar, etc.).

Ou, se o seu tema for um tema personalizado, substitua tudo, para obter setTheme(yourThemesResouceId)

jcw
fonte