021_02UI之自定义主题和样式

  在Android的应用的资源文件中有一个style.xml文件,可以对某个类型的组件指定大致相似的格式,比如字体、颜色、背景色等。这样可以不必为某个View组件去重复指定这些属性,而且有利于后期的代码修改和维护。Style格式可以被多个View组件所使用,被需要这一类样式集合的View组件所使用。

  与样式非常相似,主题资源的xml文件通常也放在/res/values目录下,主题一般为整个应用或者某个Activity的样式,换句话说主题是针对窗体级别或整个应用程序的样式

  主题的设置有两种方式

    (1)在AndroidMainfest.xml中为Activity指定主题

    (2)在Activity创建时调用 setTheme方法给某个Activity添加主题

/res/values/styles.xml 为主题和两个textView设置的style

 1 <resources>
 2 
 3     <!--
 4         Base application theme, dependent on API level. This theme is replaced
 5         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
 6     -->
 7     <style name="AppBaseTheme" parent="android:Theme.Light">
 8         <!--
 9             Theme customizations available in newer API levels can go in
10             res/values-vXX/styles.xml, while customizations related to
11             backward-compatibility can go here.
12         -->
13     </style>
14             
15     <style name="mystyle">
16         <item name="android:layout_width">wrap_content</item>
17         <item name="android:layout_height">wrap_content</item>
18         <item name="android:textColor">#FF0000FF</item>
19         <item name="android:textSize">20sp</item>
20         <item name="android:background">#8800FF00</item>
21         <item name="android:paddingTop">10dp</item>
22         <item name="android:paddingRight">20dp</item>
23         <item name="android:paddingLeft">20dp</item>
24         <item name="android:paddingBottom">10dp</item>
25         <item name="android:layout_marginLeft">50dp</item>
26         <item name="android:layout_marginTop">20dp</item>
27         <item name="android:textStyle">bold</item>
28     </style>
29 
30      <style name="mystyle2"  parent="mystyle">        
31         <item name="android:textColor">#FF0000</item>    
32     </style>
33       
34      <style name="MyTheme" >
35          <item name="android:colorBackgroundCacheHint">@null</item>
36         <!--<item name="android:windowIsTranslucent">true</item>
37           <item name="android:windowNoTitle">true</item>
38          <item name="android:windowFullscreen">true</item> -->
39         <item name="android:windowBackground">@drawable/fun1</item>       
40      </style> 
41      
42 </resources>

本例采用setTheme方法添加主题

 1 package com.example.day21_02styleandtheme;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MenuItem;
 7 
 8 public class MainActivity extends Activity {
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setTheme(R.style.MyTheme);
14         setContentView(R.layout.activity_main);
15     }
16 }
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.example.day21_02styleandtheme.MainActivity" 
10     android:orientation="vertical">
11 
12     <TextView
13         style="@style/mystyle2"
14         android:text="功能1" />
15      <TextView
16         style="@style/mystyle"
17         android:text="功能2" />          
18 </LinearLayout>

效果图:

物随心转,境由心造,一切烦恼皆由心生。
原文地址:https://www.cnblogs.com/woodrow2015/p/4547713.html