Применить тему к действию в Android?

86

Я знаю, как применить тему ко всему приложению, но куда мне пойти, чтобы применить тему только к одному действию?

Вилли
источник

Ответы:

158

Вы можете применить тему к любому действию, включив ее android:themeвнутрь <activity>файла манифеста.

Например:

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

И если вы хотите установить тему программно, используйте setTheme()перед вызовом setContentView()и super.onCreate()метод внутри onCreate()метода.

Пареш Майани
источник
1
А как насчет отключения темы? на одном мероприятии
Юша Алеайуб
@Yousha Aleayoub: ты пробовал просто установить другую тему?
Янник
Нет, но я просто хочу отключить / удалить тему и сделать ее базовой ... :)
Юша Алеайуб
1
и в tools:context= ".YourAtivityName"
Activity
34

Чтобы установить его программно в 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);

Чтобы установить в области приложения в Manifest.xml (все действия):

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

Чтобы установить в области действия в Manifest.xml (одно действие):

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

Чтобы создать собственную тему, вам нужно будет объявить тему в файле themes.xml и установить стили в файле styles.xml.

живи любя
источник
1
А как насчет отключения темы? на одном мероприятии
Юша Алеайуб
2
Почему вы добавили два android:themeатрибута?
Flame of udun
@Vineet Kaushik android:theme="@android:style/Theme.Holo"- это синтаксис для добавления встроенной темы Android. android:theme="@style/MyTheme"- это синтаксис для добавления настраиваемой темы, описанной в вашем styles.xmlфайле. В вашем фактическом AndroidManifest.xmlфайле вы должны использовать только один или другой для каждого раздела, а не оба.
Сорен Стаутнер 09
1
@Yousha Aleayoub, чтобы отключить тему, создайте пустую тему styles.xmlи затем используйте синтаксис android:theme=@style/MyBlankTheme.
Сорен Стаутнер 09
Кажется, что размещение более одной настраиваемой темы в манифесте не работает. Если вы добавляете тему на уровне приложения, а вторую - на уровне активности, используется только тема приложения. Я пытался добавить одну тему для каждого действия с разным «внешним видом», но безуспешно.
Питер
8

Перед тем как позвонить setContentView(), позвоните setTheme(android.R.style...)и просто замените ... на ту тему, которая вам нужна (Theme, Theme_NoTitleBar и т. Д.).

Или, если ваша тема является настраиваемой темой, замените ее целиком, чтобы получить setTheme(yourThemesResouceId)

jcw
источник