2012年10月23日星期二

Android中正确使用自定义style及Theme

【零】
如果你仅仅是对默认的主题进行很少的修改,可以查看Android本身提供的一些主题模式,比如将背景变成透明,可以在AndroidManifest.xml中你想改的activity的tag中加入:
android:theme="@android:style/Theme.Translucent"
然后直接运行就可以了。可以参考官方说明

【一】
如果需要将一个Activity的主题改成自定义形式:

1.先在AndroidManifest.xml中你想改的activity的tag中加入:
android:theme="@style/MyTheme"
如果需要将该主题模式运用于所有Activity,可以在AndroidManifest.xml中写上这样一句:
<activity android:theme="@style/MyTheme">

2.然后在res/values文件夹下创建一个styles.xml的文件,在文件中写入:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Light" >
          <!--需要定义的内容-->
    </style>
</resources>

3.需要定义的内容一般以item形式定义,例如:
<item name="android:textColor">#00FF00</item>
这样可以应用自定义的主题模式了。

【二】
需要注意的还有Android版本问题,如果开发的应用面向Android3.0以下的用户,那么最好采取以下步骤:

1.在res文件夹下创建values-v11(面向Android 3.0+)和values-v14(面向Android 4.0+两个文件夹。

2.在这两个文件夹中分别写入
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Holo.Light" >
          <!--需要定义的内容-->
    </style>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.DeviceDefault.Light" >
          <!--需要定义的内容-->
    </style>
</resources>
以上Holo是对于Android 3.0+的,DeviceDefault是对于Android 4.0+的。

或者其他你需要引用的parent,比如
    <style name="MyTheme" parent="android:Theme.Holo.Light.NoActionBar" >
          <!--需要定义的内容-->

【三】
最后一个问题是在自定义的主题中定义不同插件的模式,这里以Tab插件为例,我们可以用这样的形式
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Holo.Light.NoActionBar" >
          <item name="android:tabWidgetStyle">@style/LightTabWidget</item>
    </style>
    <style name="LightTabWidget" parent="@android:style/Widget.TabWidget">
       <!-- 需要定义的内容 -->
    </style>
</resources>
来单独定义插件的一些属性。

这里可以参考themes_device_defaults.xml的源码。

没有评论:

发表评论