Android-Theme 主题

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属性引入。运行实例如下:


除了在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();
   
}
}

运行项目如下:

发布了498 篇原创文章 · 获赞 115 · 访问量 126万+

猜你喜欢

转载自blog.csdn.net/yayun0516/article/details/52713414