3.在res/values目录下建议一个attrs.xml.里面用来定义一些style 的属性.如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="button" format="reference"/> <attr name="background" format="reference"/> <attr name="textColor" format="reference"/> </resources>
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppTheme_Default" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="button">@drawable/btn_grey</item> <item name="background">@drawable/backgroud2</item> <item name="textColor">@color/red</item> </style> <style name="AppTheme_Another" parent="AppTheme_Default"> <item name="button">@drawable/btn_blue</item> <item name="background">@drawable/backgroud1</item> <item name="android:actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:background">#33b5e5</item> </style> </resources>
public class BaseActivity extends Activity { public int mTheme = R.style.AppTheme_Default; @Override protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState == null) { mTheme = PreferenceHelper.getTheme(this); } else { mTheme = savedInstanceState.getInt("theme"); } setTheme(mTheme); super.onCreate(savedInstanceState); } @Override protected void onResume() { super.onResume(); if (mTheme != PreferenceHelper.getTheme(this)) { reload(); } } protected void reload() { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); } }
int[] attrs = new int[]{R.attr.button}; TypedArray typedArray = context.obtainStyledAttributes(attrs);
b).直接在layout文件里面使用.比如我们 demo中的两个布局文件 .在这里我们例出一个来讲解.
second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/background" > <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="?attr/textColor" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/msg_second" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="?attr/button" android:text="@string/btn_text" /> </RelativeLayout>
代码解释:
android:background="?attr/background"在这里使用了我们在attrs.xml中的background属性.
android:textColor="?attr/textColor" 使用了我们在attrs.xml中定义的textColor
android:background="?attr/button" 在这里使用了我们在attrs.xml中定义的button属性
我们再来走一个这个调用的流程.
在生成布局文件中RelativeLayout的时候,系统找到attrs.xml中定义的backround,然后再去当前设置的theme(我们假设是AppTheme_Default)中找到background指向的资源@drawable/backgroud2然后加载到内存赋值给RelativeLayout的android:background.如果当前主题 是AppTheme_Another,就会导入@drawable/backgroud1给RelativeLayout的android:background
好的.基本就讲到这里了.大家可以多看看 demo .多自己摸过下.
具体的 Demo下载地址: [http://www.eoeandroid.com/thread-264902-1-1.html](http://www.eoeandroid.com/thread-264902-1-1.html)