android的风格
android的风格是一个描述android控件的(根控件是view)属性的集合,这些属性包括控件大小、背景颜色、甚至动态效果等视觉属性。androi风格使用xml文件进行描述然后在布局文件中引用,风格文件的xml名字是可以随意命名的(当然要以.xml为扩展名),放到android工程的res/values目录下面,android编译器在生成.apk文件时(android可执行文件)做为资源文件进行解析编译。
先看一个例子:
java代码 style.java
package tt.t;
import java.net.URL;
import android.app.Activity;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class TtActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
布局layout的main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:baselineAligned="true">
<TextView
style="@style/CodeFont_blue"
android:text="@string/hello" />
</LinearLayout>
风格文件mystyle,这个文件在/res/values工程目录下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont_green" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
<item name="android:typeface">monospace</item>
</style>
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000FF</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
布局文件中引用的风格style="@style/CodeFont_blue"就是mystyle.xml中的风格
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000FF</item>
<item name="android:typeface">monospace</item>
</style>
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000FF</item>
<item name="android:typeface">monospace</item>
</style>
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000FF</item>
<item name="android:typeface">monospace</item>
</style>
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#0000FF</item>
<item name="android:typeface">monospace</item>
</style>
在mystyle.xml中描述了两个风格,风格文件xml的跟节点必须是resources节点(<resources>开始</resources>结尾),resources子节点是style节点代表一个风格,每个style的子节点是item,每个item可以描述一个风格的属性。
android风格继承
在android中系统提供了很多已经定义好的风格,我们可以直接继承过来可以修改在上面修改和添加风格元素,继承方法使用 parent 关键字如上面的
<style name="CodeFont_blue" parent="@android:style/TextAppearance.Medium">
就是继承了android本身的@android:style/TextAppearance.Medium style。同样的方法可以继承我们自己的风格:
<style name="CodeFont_blue" parent="@android:style/CodeFont_green">
继承自己的风格可以简写:
如
<style name="CodeFont_green.change">
<item name="android:textColor">#FF0000</item>
</style>
甚至还可以
<style name="<stylename="CodeFont.Red.Big">
<item name="android:textSize">30sp</item>
</style>.Big">
<item name="android:textSize">30sp</item>
</style>
androi的主题也可以继承,如:
<color name="custom_theme_color">#b0b0ff</color>
<style name="CustomTheme"parent="android:Theme.Light">
<item name="android:windowBackground">@color/custom_theme_color</item>
<item name="android:colorBackground">@color/custom_theme_color</item>
</style>
风格继承类似面向对象编程语言如C++和java中类的继承,继承了一个父类的子类可以使用父类的方法,同时自己也可以添加或者修改父类的方法。风格继承类似子风格可以使用父类风格的属性,同时可以添加或者修改父类风格属性。我们知道了如何设置android控件风格那每个android控件都有哪些属性?android的控件属性可以在android的开发文档中查找每个控件的XML Attributes,上面列出了各个控件的风格属性。
andriod通过设定style和theme还有可以实现一些动画效果,这是网上的一篇文件:
http://www.eoeandroid.com/thread-653-1-1.html(谢谢这位大侠)
详细请参考android开发文档关于主题和风格的文章
http://developer.android.com/guide/topics/ui/themes.html