通过学习发现android中界面、元素及动画一般都用到style,关于系统自带的styles.xml文件(我的在D:android-sdk-windowsplatformsandroid-19dataresvaluesstyles.xml),源码如下:
<style name="WindowTitle">
<item name="android:singleLine">true</item>
<item name="android:textAppearance">@style/TextAppearance.WindowTitle</item>
<item name="android:shadowColor">#BB000000</item>
<item name="android:shadowRadius">2.75</item>
</style>
<style name="DialogWindowTitle">
<item name="android:maxLines">1</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:textAppearance">@style/TextAppearance.DialogWindowTitle</item>
</style>
……
以上是关于窗体或对话框样式;
<style name="Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
<item name="android:minHeight">20dip</item>
<item name="android:maxHeight">20dip</item>
<item name="android:mirrorForRtl">true</item>
</style>
<style name="Widget.SeekBar">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
<item name="android:minHeight">20dip</item>
<item name="android:maxHeight">20dip</item>
<item name="android:thumb">@android:drawable/seek_thumb</item>
<item name="android:thumbOffset">8dip</item>
<item name="android:focusable">true</item>
<item name="android:mirrorForRtl">true</item>
</style>
……
以上是关于UI控件的样式;
<style name="Animation.Activity">
<item name="activityOpenEnterAnimation">@anim/activity_open_enter</item>
<item name="activityOpenExitAnimation">@anim/activity_open_exit</item>
<item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>
<item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
<item name="taskOpenEnterAnimation">@anim/task_open_enter</item>
……
</style>
……
以上是关于Activity切换时动画样式;
<style name="TextAppearance.Widget.ActionBar.Title"
parent="@android:style/TextAppearance.Medium">
</style>
<style name="TextAppearance.Widget.ActionBar.Subtitle"
parent="@android:style/TextAppearance.Small">
</style>
<style name="Widget.PopupMenu" parent="Widget.ListPopupWindow">
</style>
……
以上关于状态栏及弹出菜单样式,可以看出,样式也可以继承,parent对应父样式;
style.name是全局唯一的,其他地方要通过name关联引用的,parent有点类似继承。style标签里面的每一个<item />对应的是一个属性及其值,一般都是系统自带的属性,如果自定义style是可以包含自定义属性的。
在布局文件中,一般的UI控件若没有显示的设置style=""属性,系统在渲染时会默认给定一个,当然也可以显示指定控件的style属性,如下:
<ProgressBar android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal" />
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button1"
style="@android:style/Widget.Button.Inset" />
引用系统自带的style都是以“@android:style/”开头的+[style.name];其实可以看作style是包含很多属性的集合,它作为一个整体加到元素上的;
如果要自定义style也是可以的,在res/values/strings.xml文件里或在values目录下新建一个xxx.xml,写入自己的样式:
<style name="my_progress_style" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly" >false</item>
<item name="android:progressDrawable">@drawable/progress_layer_list</item>
<item name="android:minHeight">5dp</item>
<item name="android:maxHeight">5dp</item>
</style>
<style name="my_button_style" >
<item name="android:background" >#ff550000</item>
<item name="android:longClickable">false</item>
<item name="android:alpha">100</item>
<item name="android:height">36dp</item>
<item name="android:width">64dp</item>
</style>
上面第一个是定义了进度条样式它有继承父样式;第二个是定义了按钮样式,其实也可以用于其他控件,只要里面所有属性都支持;
在布局文件中引用自定义样式:
<ProgressBar android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/my_progress_style" />
去掉@android:直接使用@style/[style.name]。
大致了解这么多,细节还需再研究研究。