android基础知识19:自定义主题和风格

android中可以自定义主题和风格

  风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等。

可以在res/values目录下新建一个styles.xml的文件,在这个文件里面有resource根节点,在根节点里面添加item项,item项的名字就是属性的名字,item项的值就是属性的值,如下所示:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyText" parent="@android:style/TextAppearance"> <item name="android:textColor">#987456</item> <item name="android:textSize">24sp</item> </style> </resources> style中有一个父类属性parent, 这个属性是说明当前的这个style是继承自那个style的,当然这个style的属性值中都包含那个属性中的,你也可以修改继承到的属性的值,好了,style完成了,我们可以测试一下效果了,先写一个布局文件,比如说一个TextView什么的,可以用到这个style的。这里我就写一个EditText吧。下面是布局文件:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/myEditText" android:layout_width="match_parent" android:layout_height="match_parent" style="@style/MyText" android:text="测试一下下"/> </LinearLayout>下面我们在代码中引用这个布局文件,看一下是不是我们要的style的效果。
看效果:

android基础知识19:自定义主题和风格

恩,这里面的字体和颜色都是我们在style里面设置的,比方说有很多要统一字体大小和颜色的,我们就可以用到style了,还是很方便的。
当然系统里面有很多style的,具体什么效果我就不多说了,大家可以试试看。
  说完了style,下面就说说Theme,Theme跟style差不多,但是Theme是应用在Application或者Activity里面的,而Style是应用在某一个View里面的,还是有区别的。

android自带了很多风格:

android基础知识19:自定义主题和风格

好了,废话不多说,还是看代码吧。
下面的是style文件:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyText" parent="@android:style/TextAppearance"> <item name="android:textColor">#987456</item> <item name="android:textSize">24sp</item> </style> <style parent="@android:style/Theme" name="CustomTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFrame">@drawable/icon</item> <item name="android:windowBackground">?android:windowFrame</item> </style> </resources> 可以看到这里写了一个继承自系统默认的Theme的主题,里面有3个属性,这里强调一下第三个属性的值的问题,这里打个问号,然后加前面的一个item的名字表示引用的是那个名字的值,也就是那个名字对应的图片。
然后我们在Manifest.xml里面的Application里面加一个Theme的属性,这个属性对应的就是我们上面写的Theme。

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/CustomTheme"> <activity android:name=".TestStyle" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>完了之后我们运行一下,看下是不是我们想要的效果。
我们可以看到,没有标题栏,背景和fram都是我们设置的图片。
当然也可以在代码中设置主题:
如下:

package com.test.shang; import android.app.Activity; import android.os.Bundle; public class TestStyle extends Activity { @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState);      setTheme(R.style.CustomTheme);      setContentView(R.layout.test_style); } } 另外,其实是可以继承android自带的主题的,比如要把activity作为一个dialog弹出,则可以如下设置主题:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="mytheme" parent="android:Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:textSize">20sp</item> <item name="android:textColor">#000000</item> </style> </resources> 当然主题的配置还可以以xml文件的形式,分享一下如何自定义Activity的主题,使得它看起来像一个弹窗。

首先,我们在res/drawable文件夹下建立一个名为my_bg的新xml配置文件,内容如下:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景颜色 --> <solid android:color="#a060ff" /> <!-- 3D效果 --> <stroke android:width="3sp" color="#c0ffff" /> <!-- 角 --> <corners android:radius="10sp" /> <padding android:left="10sp" android:top="10sp" android:right="10sp" android:bottom="10sp" /> </shape>然后,在res/value文件夹下建立名为style的xml配置文件,内容如下

<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 定义一个样式,继承android系统的对话框样式 android:style/Theme.Dialog --> <style name="my_theme" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@drawable/my_bg</item> </style> </resources> 最后,在AndroidManifest.xml中将本Activity的主题设置为我们的自定义主题即可

<activity android:name=".CustomActivityActivity" android:label="@string/app_name" android:theme="@style/my_theme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> android基础知识19:自定义主题和风格

参考资料:

Android 自定义主题和风格

android 自定义主题 (theme)

Android自定义Activity主题