本文主要介绍android应用程序如何设置样式,包括样式定义、单个view设置样式、 全局样式设置、样式继承关系。
1、样式定义
android的样式定义在res/values/style.xml文件中,类似web前端中将样式定义在某个css文件中,但android的style.xml是自动加载的,不需要手动import或link。目前还不了解android是否可以或怎么定义多个style文件。
如下是一组样式的定义
<!-- 全局字体样式--> <style name="DefaultFontStyle"> <item name="android:textSize">18px</item> <item name="android:textColor">#0000CC</item> </style> <!-- 全局背景色--> <style name="DefaultBgColor" parent="@style/DefaultFontStyle"> <item name="android:background">#F2F2F2</item> </style> <!-- 全局样式--> <style name="DefaultStyle" parent="@style/DefaultBgColor"> </style>
a. android的样式定义是通过style标签完成的,通过添加item元素设置不同的属性值
b. 样式可以通过设置parent进行继承。上面的DefaultBgColor继承自DefaultFontStyle,而DefaultStyle又继承自DefaultBgColor,这样DefaultStyle就有了字体大小颜色、背景色的属性了。
c. android的主题样式和一般样式的定义是一样的,只是引用时不同,下面将会介绍
2、单个view如何设置样式
比如TextView,设置样式如下
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我在做什么:" android:textSize="18px" android:textColor="#0000CC" />
也可以引用第一部分定义的样式,如下
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我在做什么:" style="@style/DefaultStyle" />
设置view的style属性进行样式调用,推荐使用此种方式将样式和布局分离。其他view及viewGroup设置相同。
对于单个view的更多属性可以参考http://developer.android.com/reference/android/R.styleable.html#View
或具体的某个view的sdk文档xml attribute.
3、全局样式设置
在web前端编程中,可以使用
body { background: #cce8cf; color: #000; font-family: 宋体 verdana, tahoma; font-size: 18px; padding: 1px 2px 0 2px; counter-reset: section; }
设置全局的样式
div { margin-top: 10px; margin-bottom: 10px; }
设置单个标签的样式
android中我们同样可以办到,只是这种全局样式被称作主题theme,比如对于整个应用默认字体都要18px,颜色为#0000CC,背景色为#F2F2F2,我们可以通过在AndroidManifest.xml设置application的android:theme属性完成,如下:
<application android:theme="@style/DefaultStyle">
DefaultStyle即为第一部分中定义的主题,在第一部分中我们提到的主题和样式定义一样也是这个意思,只是引用的时候使用android:theme罢了。
下面为单个activity设置主题的代码
<activity android:name=".AccountManageActivity" android:theme="@style/DefaultStyle">
activity的主题还有一些特殊设置,如
android:theme="@android:style/Theme.Dialog"
为对话框样式设置
主题的设置也可以在代码中通过setTheme(R.id.xx)完成。
接下来问题就出现了,如果一个应用设置了application的主题,设置了activity,设置了view的样式,那么view的各个样式属性值究竟是多少呢??
3、样式继承关系
android的样式采取和css中一样的覆盖、继承原则,和面向对象的子类覆盖父类属性、继承没有定义的父类属性值的原则是一样的。
如果一个TextView自己设置了样式,它的ViewGroup设置了样式,activity设置了主题,application设置了主题。
它会先读取自己样式的值,对于自己没有的样式向上查找第一个找到的值即为要采取的值。
依次读取的顺序为View自己的样式->上一层ViewGroup的属性值->上上层ViewGroup的属性值->…->activity主题->activity主题。
例子如下
<!-- 全局字体样式--> <style name="DefaultFontStyle"> <item name="android:textSize">18px</item> <item name="android:textColor">#0000CC</item> </style> <!-- 全局背景色--> <style name="DefaultBgColor" parent="@style/DefaultFontStyle"> <item name="android:background">#F2F2F2</item> </style> <!-- 全局样式--> <style name="DefaultStyle" parent="@style/DefaultBgColor"> </style> <!-- textView字体样式--> <style name="TextViewFontStyle"> <item name="android:textSize">20px</item> </style>
application主题为
<application android:theme="@style/DefaultStyle">
activity主题为
<activity android:name=".AccountManageActivity" android:theme="@style/DefaultStyle">
textView样式设置如下
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我在做什么:" style="@style/TextViewFontStyle" />
则textView中最终字体大小为20px,颜色采用activity中设置的0000CC
相关推荐
android style(样式)和theme(主题)设置
NULL 博文链接:https://trinityblood.iteye.com/blog/1743655
Android_样式(style)&主题(theme)&显示单位
android:theme=”@android:style/Theme.Dialog” : Activity显示为对话框模式 android:theme=”@android:style/Theme.NoTitleBar” : 不显示应用程序标题栏 android:theme=”@android:style/Theme.NoTitleBar....
一,Theme主题 1.1,Theme主题作用范围 Theme主要是针对应用级别的或者说窗体级别,可以设置应用主题(应用换肤效果)或者Activity的主题;主题是不能应用在某一个单独的View中; 1.2,Theme主题的定义 在AS中res/...
android-styletheme-sample Android 中样式和主题的示例应用程序
主题(theme)应用到整个Activity和Application的样式,当设置好主题后,Activity或整个程序中的视图都将使用主题中的属性,当主题和样式中的属性发生冲突时,样式的优先级要高于主题。 自定义主题代码如下(styles....
parent属性。这就不难理解style是可以继承的。在这里我们继承的是系统默认的EditText属性,只修改了背景和文字颜色而已。...找了一番终于也找到了,所有系统控件的样式是在一个style.xml文件中,这个文件也
设置样式有两种方法:对于单个视图,通过将样式属性添加到布局的XML的View元素中。 或者,对于整个Activity或应用程序,通过将android:theme属性添加到Android清单中的或元素。 样式定义和使用样式res / values / ...
1.增加Theme主题 new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT,null).show(); 效果: 4.0以上的版本才可使用此Theme,注意对版本的判断。 若低版本的则主题设置为以下 android:theme=”@android:...
Android系统的themes.xml和style.xml(位于\base\core\res\res\values\)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。 一、threme android中的主题一般用于窗体级别的,用于改变窗体样式 1、...
就目前的互联网发展来看,已经有越来越多...Android系统的themes.xml和style.xml(位于/base/core/res/res/values/)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。以下的这段代码属性是在Th
本篇文章是对android中的样式与主题(style&theme)进行了详细的分析介绍,需要的朋友参考下
您可以在其中提供包含样式参数的 , 和实例: MaterialTheme ( typography = type, colors = colors, shapes = shapes) { // Surface, Scaffold, etc} 主题的允许通过XML主题属性对视图进行类似的主题设置,如下所示...
安装 Android SDK 和Eclipse 插件 Android应用 android样式和主题(style&theme) Activity生命周期
1.主题 主题是包含一种或多种的格式化属性集合,在程序中调用... <item></item>:设置主题的样式 示例(定义一个名为AppTheme的主题) <style name=AppTheme parent=Theme.AppCompat.Light.DarkActionBar>
本文实例讲述了Android实现将一个Activity设置成窗口样式的方法。分享给大家供大家参考,具体如下: 1.在res/value文件夹下的style.xml文件中加入如下代码: <style name=Theme.FloatActivity parent=android:...
但同时对话框中的内容有更多控制和能控制其生命周期,这时你可以使用带有Dialog样式的Activity来应用你的项目中,想使Activity有对话框那样效果可以在Androidmanifest中添加 Android:style/Theme.Dialog 的主题特性 ...
Android中实现全屏、无标题栏的两种办法,另附Android系统自带样式的解释 实现全屏无标题栏: 1.在xml文件中进行配置 AndroidManifest.xml中,找到需要全屏或设置成无标题栏的Activity,在该Activity进行如下配置...
继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类 第一步: 我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,...