尽管 Android 系统提供了很多样式和主题,但有时这些效果并不能实现特殊的效果或者风格,此时就可以自定义样式和主题。定义样式和主题的步骤如下:
(1) 在 res/values 目录下创建一个样式文件 style.xml (文件名字可以自定义),添加一个 <resources> 根结点。
(2)在<resources>结点中添加一个<style>节点,并在该节点中为样式或主题定义一个唯一的名字,也可以选择增加一个父类属性,表示当前风格继承父类的风格。
(3)在<style>节点中声明一个或多个<item>,每个<item>节点需要定义一个属性名,并在元素内部设置这个属性的值。
为了让初学者更好地学习,接下来通过一个具体的案例来演示如何自定义样式和主题。具体步骤如下:
创建一个名为 “Style” 的应用程序,将包名修改为 cn.itcast.style。在 res/ values 目录中添加一个用于定义样式的文件,名为 mystyle.xml(文件名必须小写),具体如图1 所示。
图 1 mystyle.xml
mystyle.xml 文件中定义的样式和主题,具体如下所示:
<resources> <style name="TextStyle"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">30dip</item> <item name="android:textColor">#990033</item> </style> <style name="MyTheme"> <item name="android:background">#D9D9D9</item> </style> </resources>
上述代码在 <style name="TextStyle">节点中设置了一个样式,定义了控件宽度和高度为wrap_content 显示全部内容,字体大小为 30dip,字体颜色为红色。<style name="MyTheme"> 结点用于设置 Activity 背景色为灰色。
在 activity_main.xml 的<TextView>控件中,通过 style="@style/TextStyle"引入定义好的样式,具体代码如下所示:
<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" tools:context=".MainActivity" > <TextView style="@style/TextStyle" android:layout_centerInParent="true" android:text="自定义样式" /> </RelativeLayout>
在 AndroidManifest.xml 的<activity>节点中,通过 android:theme="@style/MyTheme"引入定义好的主题,具体代码如下所示:
<activity android:name="cn.itcast.style.MainActivity" android:theme="@style/MyTheme" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
图 2 自定义样式和主题
自定义的样式还可以通过 parent 函数继承其他已经定义好的样式,使程序的扩展性更好,具体代码如下所示:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyStyle"> <item name="android:textSize">30dip</item> <item name="android:textColor">#990033</item> </style> <style name="TextStyle" parent="MyStyle"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> </style> </resources>
上述代码中,MyStyle定义了字体的大小颜色,TextStyle中通过 parent 函数继承 MyStyle 中的属性,这种方法设置样式的效果与图2是一样的。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。