Android 风格和主题
Android xml风格和主题文件的编写,是涉及到整个程序界面美观的因素之一。 <wbr><wbr>当设计应用程序时,你可以用风格和主题来统一格式化各种屏幕和UI元素。较好的应用风格和主题,可以实现美观而统一的界面,和web中的CSS一样,Android也可以为界面定义全局、公用的Style。</wbr></wbr>
<wbr><wbr></wbr></wbr>
Styles和Themes都是资源文件位于res/values,当然,可以用Android提供的一些默认的风格和主题资源,也可以自定义自己的主题和风格资源。
<wbr><wbr></wbr></wbr>
Styles:
风格是一个包含一种或者多种格式化属性的集合,可以将其作为一个单位用在布局XML单个元素当中。 <wbr><wbr>比如,可以定义一种风格来定义文本的文字大小和颜色,然后将其应用于视图
<wbr><wbr>元素的一个特定实例。</wbr></wbr></wbr></wbr>
<wbr><wbr></wbr></wbr>
Theme:
主题是一个包含一种或者多种格式化属性的集合,可以将其作为一个单位用在应用程序所有的活动当中或者某个活动当中。比如,可以定义一个主题,它为window frame和panel 的前景和背景设置了特定的颜色,
<wbr><wbr>并为菜单定义文字的大小和颜色属性,然后将这个Theme应用到应用程序的Activity中。</wbr></wbr>
<wbr><wbr></wbr></wbr>
Style和Theme的XML文件结构:
对每一个Styles和Themes,有一个<resources>根节点,给<style>元素增加一个全局唯一
<wbr><wbr>的名字,也可以选择增加一 <wbr><wbr>个父类属性。在后边我们可以用这个名字来应用风格,而 <wbr><wbr>父类属性标识了当前风格是继承
<wbr><wbr>于哪个风格。在<style>元素内部,申明一个或者多个<span style="color:#ff0000"><strong><item></strong></span>,每一个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。<br><wbr><wbr><br>
新建自定义的风格和主题 :<br>
1. <wbr><wbr>在res/values 目录下新建一个名叫<span style="color:#ff0000"><strong>style.xml</strong></span>的文件。<br>
2. <wbr><wbr>对每一个风格和主题,给<style>元素增加一个全局唯一的名字,和一个可选的父类属性。在后边我们可以名字来应用风格,而父类属性标识了当前风格是继承于哪个风格。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
3. <wbr><wbr>在<style>元素内部,申明一个或者多个<item>,每一个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。</wbr></wbr>
4. <wbr><wbr>然后可以在其他XML资源,manifest或应用程序代码中引用这些自定义资源。</wbr></wbr>
<wbr><wbr></wbr></wbr>
风格Styles(SDK提供的Style的例子) :
<wbr><wbr><strong><?xml version="1.0" encoding="utf-8"?><br><wbr><wbr><resources><br><wbr><wbr><wbr><wbr><style name="SpecialText" parent="@style/Text"><br><wbr><wbr><wbr><wbr><wbr><wbr><item name="android:textSize">18sp</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name="android:textColor">#008</item><br><wbr><wbr><wbr><wbr></style><br><wbr><wbr></resources><br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong>如上所示,你可以用<item>元素来为你的风格定义一组格式化的值。在Item当中的name属性可以 <wbr><wbr>是一个字符串,一个16进制数所表示的颜色或者任何其他资源的引用。<br><wbr><wbr><br><span style="color:#ed1c24"><strong>注意:</strong></span>在<style>元素中的父类属性。这个属性让你可以能够定义一个资源,当前风格可以从这个资源当中继承到值。你可以从任何包含这个资源当中继承此风格。通常上,你的资源应该一直直接或者间接地继承Android的标准风格资源。这样的话,你就只需要定义你想改变的值。<br><wbr><wbr><br>
在这个例子当中的EditText元素,演示了如何引用一个XML布局文件当中定义的风格:<br><wbr><wbr><EditText id="@+id/text1"<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong><span style="color:#ff0000">style="@style/SpecialText"<br></span></strong><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_width="fill_parent"<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:layout_height="wrap_content"<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>android:text="Hello, World!" /></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
现在这个EditText部件所表现出来的风格将是我们在上边的XML文件中所定义的那样。
<wbr><wbr></wbr></wbr>
另:转载一个自定义实例
1.在res/values 目录下新建一个名叫style.xml的文件。
2.在style.xml定义内容如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<wbr><wbr><span style="color:#ff0000"><strong><style name=”DavidStyleText1″><br></strong></span><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textSize”>18sp</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textColor”>#EC9237</item><br><wbr><wbr><strong><span style="color:#ff0000"></style><br></span></strong><wbr><wbr><strong><span style="color:#ff7e00"><style name=”DavidStyleText2″><br></span></strong><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textSize”>14sp</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textColor”>#FF7F7C</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:fromAlpha”>0.0</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:toAlpha”>0.0</item><br><wbr><wbr><span style="color:#ff7e00"><strong></style><br></strong></span></resources><br>
上面样式的定义,从字面意思就可以了解其功能了,下面看看如何应用它吧:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<!– 应用样式1的TextView –>
<TextView
<wbr><wbr><strong><span style="color:#ed1c24">style="@style/DavidStyleText1"</span></strong><br><wbr><wbr>android:layout_width=”fill_parent”<br><wbr><wbr>android:layout_height=”wrap_content”<br><wbr><wbr>android:gravity=”center_vertical|center_horizontal”<br><wbr><wbr>android:text=”moandroid”/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<!– 应用样式2的TextView –>
<TextView
<wbr><wbr><strong><span style="color:#ed1c24">style="@style/DavidStyleText2″<br></span></strong><wbr><wbr>android:layout_width=”fill_parent”<br><wbr><wbr>android:layout_height=”wrap_content”<br><wbr><wbr>android:gravity=”center_vertical|center_horizontal”<br><wbr><wbr>android:text=”www.moandroid.com”<br><wbr><wbr>android:autoLink=”all”/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
现在这个EditText组件的所表现出来的风格就为我们在上边的XML文件中所定义的那样,如下:
看了新的界面是不是感觉漂亮多了,这也就是Styles的魅力吧。需要补充说明的是:单击超链接,还可以打开网页如下:
这是如何实现的了?TextView.setTextView不支持HTML TAG的输出,所以即便写成这样:
mTextView01.setText(”<a href=\”http://www.moandroid.com/\”>mo-android|享受Android带给我们的新体验</a>”);实际输出时,也就是纯文本而已,并不会作HTML TAG的转换。但若撇开HTML TAG之外(如“<”开头的标记),在TextView里加上了android:autoLink=”all”,那么正文中若有网址(http://),是可以被显示的。
Theme依然在<style>元素里边申明,也是以同样的方式引用。不同的是通过在Android Manifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个 Activity,但是主题是不能应用在某一个单独的View里。
主题Themes :
就像风格一样,主题依然在<style>元素里边申明,也是以同样的方式引用。不同的是你通过在AndroidManifest中定义的<application>和<activity>元素将主题添加到整个程序或者活动中——主题并不能应用于个别视图。
<wbr><wbr><?xml version="1.0" encoding="utf-8"?><br><wbr><wbr><resources><br><wbr><wbr><wbr><wbr><span style="color:#ed1c24"><strong><style name="CustomTheme</strong></span>">
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="android:windowNoTitle">true</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="windowFrame">@drawable/screen_frame</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="windowBackground">@drawable/screen_background_white</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="panelForegroundColor">#FF000000</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="panelBackgroundColor">#FFFFFFFF</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="panelTextColor">?panelForegroundColor</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="panelTextSize">14</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="menuItemTextColor">?panelTextColor</item><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><item name="menuItemTextSize">?panelTextSize</item><br><wbr><wbr><wbr><wbr><strong><span style="color:#ed1c24"></style></span></strong><br><wbr><wbr></resources><br>
注意:我们用了@符号和?符号来引用资源。地址符@表明我们引用的资源是其它地方定义过的(也许在这个项目中或者在Android框架中)。问号符?表明我们引用的资源的值在当前加载的主题中。这通过以名字引用特定的<item>来完成(比如,panelTextColor使用了分配给panelForegroundColor的相同颜色)。这种技巧只能用在XML资源当中。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr></wbr></wbr>
在manifest中设置主题Set the theme in the manifest :
<wbr><wbr><br>
为了给应用程序所有的活动设置主题,你可以打开清单文件AndroidManifest.xml,编辑<application>标签,让其包含android:theme属性,值是一个主题的名字,如下:</wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><strong><span style="color:#ed1c24"><application android:theme="@style/CustomTheme"><br></span></strong><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
Android中提供了几种内置的资源,有好几种主题可以用于切换而不用自己写。如果你只是想让你程序当中的某个Activity拥有这个主题,那么你可以修改<activity>标签。就像Android提供的其他内置资源一样,有好几种主题你可以切换而不用自己写。比如你可以用对话框主题来让你的活动看起来像一个对话框。在manifest中,像下面这样引用一个Android主题:
<wbr><wbr><wbr><wbr><span style="color:#ed1c24"><strong><wbr><wbr><activity android:theme="@android:style/Theme.Dialog"></wbr></wbr></strong></span></wbr></wbr></wbr></wbr>
如果你喜欢一个主题,但是想做一些轻微的调整,你只需要将这个主题添加为父主题。比如,我们将修改Theme.Dialog主题。为此,创建一个风格以Theme.Dialog为父主题:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#ed1c24"><strong><style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"></strong></span><br>
就这样,我们已经继承了Android对话框主题,因此我们可以按照自己的意愿来调整主题。这样,对于这个对话框主题中每个我们想要改变的item,我们可以在这里重新定义它的值然后在Android Manifest 文件中使用CustomDialogTheme而不是Theme.Dialog。
<wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><br><strong><span style="color:#1648ff">在程序当中设置主题Set the theme from the application :</span></strong>
<wbr><wbr><br>
如果需要的话,你还可以以编程的方式来给一个活动加载主题。为此,要使用setTheme()方法。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
注意:这样做,你应该在初始化任何上下文中的视图之前设置主题。比如,在用setContentView(View)或者inflate(int, ViewGroup)方法前。这确保系统将当前主题应用在你所有的用户界面屏幕上。
<wbr><wbr><wbr><wbr>protected void onCreate(Bundle savedInstanceState) {<br><wbr><wbr><wbr><wbr><wbr><wbr>super.onCreate(savedInstanceState);<br><wbr><wbr><wbr><wbr><wbr><wbr>...<br><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#ed1c24"><strong>setTheme(android.R.style.Theme_Light);</strong></span><br><wbr><wbr><wbr><wbr><wbr><wbr>setContentView(R.layout.linear_layout_3);<br><wbr><wbr><wbr><wbr>}<br>
如果你打算在程序代码中来加载主界面的主题,那么需要注意这个主题将不能应用于任何系统用来启动这个活动的动画,这些动画将在应用程序启动前发生。在大多数情况下,如果你想将主题应用到你的主界面,在XML中定义是一个更好的办法。<br><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
了解关于自定义风格和主题以及如何在应用程序中引用它们的详细信息,参见可用资源类型:风格和主题Available Resource Types: Style and Themes。
了解关于缺省可用的主题和风格的信息,参见R.style
<wbr><wbr></wbr></wbr>
另:在转载一个列子定义Theme的一个例子
<?xml version=”1.0″ encoding=”UTF-8″?>
<resources>
<wbr><wbr><span style="color:#ed1c24"><strong><style name=”NewTheme” parent=”android:Theme.Black”><br></strong></span><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:windowNoTitle”>true</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textSize”>14sp</item><br><wbr><wbr><wbr><wbr><wbr><wbr><item name=”android:textColor”>#FFFF0000</item><br><strong><span style="color:#ed1c24"></style><br></span></strong></resources></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
这些技巧只能用在XML资源当中
<wbr><wbr></wbr></wbr>
这里需要注意的是,对于theme资源的引用,资源ID不是文件名(theme.xml),而是资源名(NewTheme)。运行后的界面显示如下:
在AndroidManifest.xml中应用Theme
-
为了在当前所有的Activity当中使用Theme,可以打开AndroidManifest.xml 文件,编辑<application>标签,让其包含android:theme属性,值是一个主题的名字,
-
例如:<application android:theme=”@style/NewTheme”>
-
如果只是想让程序当中的某个Activity拥有这个Theme,那么可以修改<activity>标签。Android中提供了几种内置的资源,有好几种Theme你可以切换而不用自己写。比如可以用对话框Theme来让你的Activity看起来像一个对话框。在manifest中定义,
-
例如:<activity android:theme=”@android:style/Theme.Dialog”>
-
如果喜欢一个Theme,但是想做一些轻微的改变,只需要将这个Theme添加为parent。Android SDK为我们提供了很多现成的Theme,部分列举如下:
-
比如:我们修改Theme.Dialog Theme,继承ThemeDialog来生成一个新的Theme。
<style
parent=”@android:style/Theme.Dialog”>
继承了Theme.Dialog后,我们可以按照我们的要求来调整Theme。我们可以修改在Theme.Dialog中定义的每个item元素的值,然后我们在Android Manifest 文件中使用NewDialogTheme而不是 Theme.Dialog。
相关推荐
AndroidStudio将成为开发Android的主流,如此利器怎能没一款好看的主题样式,这是一款不错主题样式
总结,Android主题和样式是实现界面定制化的重要手段。通过合理地定义和应用它们,开发者能够打造出独特且一致的用户界面,同时,外部配置提供了灵活的适应性,使得应用程序在各种场景下都能保持良好的用户体验。
一、Android主题与样式 Android中的主题(Theme)是全局的UI风格,它定义了应用程序的整体外观,包括颜色、字体、布局等元素。而样式(Style)则是针对特定UI组件的外观设定,例如按钮、文本框等。主题是样式的集合...
本示例主要探讨如何在Android中运用主题与样式来美化界面,提升应用的整体质感。 主题是全局的,可以应用于整个应用程序或特定的Activity。在Android中,主题定义在`res/values/styles.xml`文件中,通过`<style>`...
1. **Android主题与样式**:Android系统通过主题和样式来统一应用的视觉元素。Holo主题是Android 4.0引入的官方主题,包含了一套完整的颜色、图标和控件样式。在低版本系统中,需要手动导入和应用这些资源。 2. **...
1. **Android主题的基本概念** - 主题是Android系统中定义UI样式的一种方式,它包含了多个样式属性,如背景颜色、字体大小、按钮样式等。 - 主题可以在应用程序级别或者活动(Activity)级别进行设置,全局主题会...
在Android开发中,Spinner是一个非常常用的控件,...通过这些方法,你可以打造出与应用主题相符、用户体验良好的Spinner组件。记住,良好的UI设计能够提升用户对应用的满意度,因此花时间在自定义控件样式上是值得的。
首先,我们要理解主题与样式的区别。主题(Theme)是对整个应用程序或应用程序的部分组件进行全局设置的一种方式,它定义了界面的基本外观,如颜色、字体等。而样式(Style)则更加具体,通常用于单个视图或视图组,...
本教程将深入讲解如何利用XML样式实现Android应用程序的主题更换功能,而无需重启Activity。 首先,理解Android中的样式和主题。样式(Style)是XML文件中的一系列属性集合,用于定义UI组件的外观。而主题(Theme)...
一个十分不错的Android主题样式,懒得设置的人可以下载看看,里面包括了代码的自定义,背景,字体大小,字体颜色等的设置,基本上能设置的都设置过了
1. **主题概念**:在Android Studio中,主题主要指的是界面的色彩方案、字体样式以及整体布局等视觉元素的集合。通过更换主题,开发者可以根据个人喜好或工作需求调整工作环境,使其更加符合自己的审美和操作习惯。 ...
Android主题主要由XML资源文件定义,通常位于`res/values`目录下,文件名通常以`styles.xml`命名。在该文件中,我们可以定义不同的主题风格,如`<style>`标签,每个`<style>`代表一种特定的主题。 2. **主题层次**...
综上所述,自定义Android的Preference样式涉及到多个层次,包括使用主题、布局、视图、属性和代码动态修改。理解这些方法,开发者可以根据自己的需求为用户创造更加美观和个性化的设置界面。在实际项目中,应根据...
Android主题换肤框架基于资源替换技术,通过在运行时加载不同的主题资源来实现换肤。通常,它会包含一个默认主题和多个可选主题,用户选择新主题后,框架会动态地将应用的资源指向新主题的资源文件。 2. **核心...
在Android开发中,主题(Theme)是为应用提供全局样式和视觉效果的关键元素。通过主题,开发者可以统一应用的外观和交互,使用户界面保持一致性和专业性。本主题涉及的知识点主要集中在如何实现应用主题的动态切换,...
样式是指为 View 或窗口指定外观和格式的属性集合。样式可以指定高度、填充、字体颜色、字号、背景色等许多属性。 样式是在与指定布局的 XML 不同的 XML 资源中进行定义。这是研究android主题和样式的例子
在Android开发中,样式(style)和主题(theme)是两个关键的概念,它们用来统一和管理应用程序的视觉表现。样式可以看作是一组预定义的属性集合,用于控制UI组件的外观,比如字体颜色、大小、背景等。而主题则是...
3. **主题与样式**:在`res/values/styles.xml`中,你可以找到应用的主题和样式定义。主题是全局的,可以影响整个应用的外观,而样式则可以定义特定组件的外观。通过修改这里的值,可以改变字体、背景色、按钮样式等...
主题与样式的定义方式类似,但作用于整个Activity或应用,主要影响UI控件的外观和行为。在AndroidManifest.xml文件中通过设置activity标签的theme属性来应用主题: ```xml <activity android:name=".MainActivity" ...