将主题应用于Android中的活动?


86

我知道如何将主题应用于整个应用程序,但是我应该在哪里将主题应用于单个活动呢?

Answers:


158

您可以通过将主题应用到任何活动android:theme里面<activity>清单文件中。

例如:

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

而且,如果您要以编程方式设置主题,则setTheme()在method内部调用setContentView()super.onCreate()method之前使用onCreate()


1
那禁用主题呢?在一次活动中
Yousha Aleayoub 2015年

@Yousha Aleayoub:您是否尝试过设置另一个主题?
Yannick

不,但我只想禁用/删除主题并使它基本... :)
Yousha Aleayoub 2015年

1
并且在活动xml中使用tools:context= ".YourAtivityName"根目录
Faisal Naseer

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
那禁用主题呢?在一次活动中
Yousha Aleayoub 2015年

2
为什么要添加两个android:theme属性?
2015年

@Vineet Kaushik,android:theme="@android:style/Theme.Holo"是添加Android内置主题的语法。 android:theme="@style/MyTheme"是用于添加styles.xml文件中描述的自定义主题的语法。在实际AndroidManifest.xml文件中,每个部分只能使用一个或另一个,不能同时使用。
索伦·斯托纳

1
@Yousha Aleayoub,要禁用该主题,请在其中创建一个空白主题styles.xml,然后使用语法android:theme=@style/MyBlankTheme
索伦·斯托纳

在清单中放置多个自定义主题似乎无效。如果在应用程序级别添加一个主题,在活动级别添加第二个主题,则仅使用一个应用程序。我尝试为每个活动添加一个主题,但主题不同,但效果不佳。
彼得

8

在致电之前setContentView(),致电setTheme(android.R.style...)并只需将...替换为所需的主题(Theme,Theme_NoTitleBar等)。

或者,如果您的主题是自定义主题,则替换整个主题,这样您就可以 setTheme(yourThemesResouceId)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.