¿Aplicar un tema a una actividad en Android?

86

Sé cómo aplicar un tema a toda una aplicación, pero ¿adónde iría para aplicar un tema a una sola actividad?

Colita
fuente

Respuestas:

158

Puede aplicar un tema a cualquier actividad incluyendo android:themedentro del <activity>archivo de manifiesto dentro.

Por ejemplo:

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

Y si desea configurar el tema programáticamente, úselo setTheme()antes de llamar setContentView()y el super.onCreate()método dentro del onCreate()método.

Paresh Mayani
fuente
1
¿Qué hay de desactivar el tema? en una sola actividad
Yousha Aleayoub
@Yousha Aleayoub: ¿Intentaste establecer otro tema?
Yannick
No, pero solo quiero deshabilitar / eliminar el tema y hacerlo básico ... :)
Yousha Aleayoub
1
y en actividad xml uso tools:context= ".YourAtivityName"en la raíz
Faisal Naseer
34

Para configurarlo programáticamente en 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 establecer el alcance de la aplicación en Manifest.xml (todas las actividades):

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

Para establecer el alcance de la actividad en Manifest.xml (actividad única):

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

Para crear un tema personalizado, deberá declarar el tema en el archivo themes.xml y establecer estilos en el archivo styles.xml.

vive el amor
fuente
1
¿Qué hay de desactivar el tema? en una sola actividad
Yousha Aleayoub
2
¿Por qué ha agregado dos android:themeatributos?
Llama de udun
@Vineet Kaushik, android:theme="@android:style/Theme.Holo"es la sintaxis para agregar un tema integrado de Android. android:theme="@style/MyTheme"es la sintaxis para agregar un tema personalizado descrito en su styles.xmlarchivo. En su AndroidManifest.xmlarchivo real , solo usaría uno u otro para cada sección, no ambos.
Soren Stoutner
1
@Yousha Aleayoub, para deshabilitar el tema, cree un tema en blanco styles.xmly luego use la sintaxis android:theme=@style/MyBlankTheme.
Soren Stoutner
Parece que poner más de un tema personalizado en el manifiesto no funciona. Si agrega un tema a nivel de aplicación y un segundo a nivel de actividad, solo se utiliza el de la aplicación. Intenté agregar un tema para cada actividad con un "look" diferente pero sin un buen resultado.
Peter
8

Antes de llamar setContentView(), llame setTheme(android.R.style...)y simplemente reemplace ... con el tema que desee (Theme, Theme_NoTitleBar, etc.).

O si su tema es un tema personalizado, reemplace todo, para que obtenga setTheme(yourThemesResouceId)

jcw
fuente