Android上Style和Theme不同: 
Theme是针对窗体级别的,改变窗体样式; 
Style是针对窗体元素级别的,改变指定控件或者Layout的样式。 

风格是一个包含一种或者多种格式化属性的集合,你可以将其用为一个单位用在布局XML单个元素当中。比如,你可以定义一种风格来定义文本的字号大小和颜色,然后将其用在View元素的一个特定的实例。

主题是一个包含一种或者多种格式化属性的集合,你可以将其为一个单位用在应用中所有的Activity当中或者应用中的某个Activity当 中。比如,你可以定义一个主题,它为window frame和panel 的前景和背景定义了一组颜色,并为菜单定义可文字的大小和颜色属性,你可以将这个主题应用在你程序当中所有的Activity里。


新建一个项目,修改styles.xml代码如下:


<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@android:color/holo_green_light</item>
<item name="colorPrimaryDark">@android:color/holo_blue_bright</item>
<item name="colorAccent">@color/colorAccent</item>
</style>

这个Style在AndroidManifest.xml文件中引用,如下:

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">

通过theme属性引入。运行实例如下:

Android-Theme 主题_ide

除了在AndroidManifest.xml中配置之外,还可以在代码中设置,如下:


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
}

在setContentView之前,调用setTheme方法传入定义的Style。运行代码可以获得和上面一样的主题风格。

除了可以为Application设置theme之外,还可以为Activity设置,如下:


<style name="testDialog" parent="Base.Theme.AppCompat.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/test</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

设置对话框样式的主题,在Activity中引用:

<activity
android:theme="@style/testDialog"
android:name=".Activity2">

</activity>

MainActivity.java:


public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
Intent intent =new Intent(this,Activity2.class);
startActivity(intent);
}
}

Activity2.java:

public class Activity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2_layout);
}
public void test(View view){
Toast.makeText(Activity2.this, "123", Toast.LENGTH_SHORT).show();
}
}

运行项目如下:

Android-Theme 主题_android_02