有时候我们不满足于系统控件的外观要改变一些背景,文字颜色等,这些属性可以在代码里更改,随便哪种控件,我们点,后面会出来一大串set开头的方法。但是在代码里这样改来改去还是比较麻烦的,如果同样的控件多了,重复的代码也比较多。控件的这些属性也是可以在xml文件里改的,同样的控件多了,还是会带来代码的重复。这进我们就可以用设置控件样子式的方法了。下面以EditText控件为例来说明如何来设置一个控件的样式,工程序源码可以在后面下载;
第一步建立一个新的工程,在main布局里面建立三个EditText控件。
第二步在工程的res/values文件夹下新建一个xml文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="et1" parent="@android:style/Widget.EditText">
<item name="android:background">#1A4EA4</item>
<item name="android:textColor">#FFF111</item>
</style>
<style name="et2" parent="@android:style/Widget.EditText">
<item name="android:background">#A6C60F</item>
<item name="android:textColor">#EC02C3</item>
</style>
</resources>
<!--
说明:
这里建立了两种样式,从字面意思上可以看出这两中样式分别都更改了背景颜色和文字颜色
,一个控件可以更改的属性有很多,这里只改了两个,要改其它的属性,我们要知道属性的name,
才可以改。那所有的属性的名字在哪呢?找了一番终于找到了,所有的属性的名字在一个attrs.xml
文件里。这个文件存在于:android sdk目录\data\res\values 目录下,找到这个文件以后我们
改某些属性时可以做为查看的资料了。
上面的两个样式中,都有一个parent属性。这就不难理解style是可以继承的。在这里我们继
承的是系统默认的EditText属性,只修改了背景和文字颜色而已。那系统的EditText样式是在哪
定义的呢?找了一番终于也找到了,所有系统控件的样式是在一个style.xml文件中,这个文件也
在上面说的那个目录下。里面我们可以找到Widget.EditText的样式定义。有了它我们也可以查看
某一种控件可以更改哪些样式了。
在设置style时,我们经常用到@和?@表明引用的的资源是在一个项目或是系统框架中定义过
的。?表明引用的资源是在当前的主题定义过的。
上面的设置背景中的值除了可以是颜色的值外,还可以是一个图片的引用哦~~。
-->
第三步我们修改main布局文件中EditText的属性。为了对比,我们将第一个属性将做改变,第二个的style属性设为我们上面建立的name为et1的样式。第三个的style属性设为我们上面建立的name为et2的样式,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="默认样式" android:id="@+id/et1"></EditText>
<EditText android:layout_width="fill_parent" android:id="@+id/et2"
android:text="自定义样式一" android:layout_height="wrap_content" style="@style/et1"></EditText>
<EditText android:layout_width="fill_parent" android:id="@+id/et3"
android:text="自定义样式二" android:layout_height="wrap_content" style="@style/et2"></EditText>
<Button android:text="改变主题" android:id="@+id/btn1"
android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>
加了一个改变主题的按钮是无效的,下一篇会用到它来设置主题。虽然定义好了style文件,但似乎并不能在java代码里设置,我没有发现像setStyle()这样的方法。所以就不 能在java代码里能过style文件动态改变控件的样式, 不知道哪位仁兄可以解决此问题,特在此求教了。
无图无真相,下面是截图:
工程文件打包:点我吧