theme和style其实使用方式是一样的,不同的是定义他们的时候,里面的item内容是不一样的,theme的item一般都含有window之类的,而style一般都是View的外观设置,比如textcolor,layout_height之类的,theme用在Activity里面设置样式而style用在View上面设置view的外观。要使用他们,只需要在res/values目录下面新建一个styles.xml文件,在里面定义style,然后在使用的地方使用@style/XXX就可以了。先来看看这个文件是什么样的:

<resources>

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>

    <style name="AppTheme" parent="AppBaseTheme"></style>

</resources>

这个里面定义两个style,分别为APPBaseTheme和AppTheme,APPBaseTheme的父类为Them.AppCompat.Light,APPTheme的父类为APPTheme,所以AppTheme拥有所有APPBaseTheme定义的item。表面上看起来里面什么都没定义,应该没有什么效果,我们先来找到Theme.AppCompat.Light看这里定义了些什么:


我们发现他的父类是Base.Theme.AppCompat.Light,我们看看这个parent里面定义了什么:



我们发现他还有个parent,下面看看这个parent里面是什么:


这个只是我截取的一部分,这里定义的所有的属性我们的APPBaseTheme都可以访问到,这些都是系统给我们定义的,如果我们引用了AppBaseTheme,而我们自己又定义了和他相同的item,那么最后的显示效果还是我们自己定义的,子类的item会覆盖掉父类的,view自己的item会覆盖掉style里面的item。

ok,下面我们自己来定义一个style然后运用到TextView上面。首先我们新建一个工程,不修改里面的代码,只修改布局文件。先来看看我们没修改时的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        style="@style/AlertDialog.AppCompat"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="#ccc"
        android:rotation="15"
        android:text="@string/hello_world"
        android:textColor="#c0c"
        android:textSize="13sp" />

</RelativeLayout>

里面只有一个TextView,下面来看看运行效果:


然后我们在styles.xml文件中定义一个style,textview上面引用style达到和上面显示效果一致,这个style的名字叫做TextViewStyle,里面的代码如下:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>
    <style name="AppTheme" parent="AppBaseTheme"></style>

    <style name="TextViewStyle">
        <item name="android:textSize">13sp</item>
        <item name="android:textColor">#c0c</item>
        <item name="android:rotation">15</item>
        <item name="android:width">200dp</item>
        <item name="android:height">200dp</item>
        <item name="android:background">#ccc</item>
    </style>


</resources>
下面来看看布局文件的改动:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        style="@style/TextViewStyle"
      android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:text="@string/hello_world" />

</RelativeLayout>

这样改动之后,我们运行看看效果是什么样的:



我们看到是一样的,这就是自定义style的使用。


下面来看看theme的使用,其实这个项目中我们是有使用到上面定义的style里面的AppTheme的,我们来看看项目的manifest文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xinxue.themedemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我们看到application标签里有一个android:theme选项里面就引用到了我们先前定义的AppTheme,下面我们修改AppTheme,把引用的背景改成绿色,修改后的style文件代码为:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:background">#0f0</item>
    </style>

    <style name="TextViewStyle">
        <item name="android:textSize">13sp</item>
        <item name="android:textColor">#c0c</item>
        <item name="android:rotation">15</item>
        <item name="android:width">200dp</item>
        <item name="android:height">200dp</item>
        <item name="android:background">#ccc</item>
    </style>

</resources>

就添加了一个item,下面来看看其运行效果:


扫描关注我的微信公众号:



可见我们定义的item起作用了,ok,theme的使用是不是和style是一样的呢???以后我们的应用想改变样式,只需要来到这个styles.xml文件中做修改就可以啦~~~~~~~···

本来想着这节很简单就不给demo了,考虑到一些特殊情况,还是提供吧:点击打开链接


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐