在学习Xamarin android的过程中,最先开始学习的还是熟练掌握android的六大布局-LinearLayout 、RelativeLayout、TableLayout、FrameLayout、GridLayout、AbsoluteLayout。当你初步了解这六大布局之后,我极力要求大家熟练掌握android中style和theme的区别,这将会在android开发中让你的界面变得更加完美 。 这就像是在web后端程序的开发过程,掌握div+css极为重要。

 不说这么多废话了,听起来好像很麻烦的样子,其实不然,甚至过于简单化了!虽然没有大牛的技术,但是我还是希望把这样一篇简单的文章写得更容易理解一些。

1.Style和Theme的有哪些不同点和相同点

不同点:

  • Theme是应用于Activity或者是整个Application的,作用于单个Activity或者所有Acity,不能作用于某个控件的
  • Style是应用于某个(些)控件,Layout的,作用于控件级别的。
  • 两者总结一句就是:相对而言Theme是作用于全局的,而Style是作用于局部的。定义方式一样,使用的地方不一样。

相同点:

  • 都位于values文件夹下的style.xml中,定义的方法一样,都是控制UI的一堆属性。

注意:当一个Activity中的控件应用了Theme中的样式又应用了Style中的样式,那么Style中的样式优先于Theme。

2.定义一个作用于MainActivity的Theme

<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="testTheme">
<item name="android:background">#ff8c00</item>
<item name="android:typeface">serif</item>
</style>
</resources>




在MainActivity中调用: [Activity(Label = "Xamarin_Android_12_11", MainLauncher = true, Icon = "@drawable/icon",Theme = "@style/testTheme")]


这是一个最简单的Theme,当然我们也可以使用android自身的主题,也可以继承android自身的主题。

<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style parent="android:Theme.Light" name="AppBaseTheme"> </style>
<style parent="AppBaseTheme" name="AppTheme">
<item name="android:typeface">serif</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>

parent是继承主题的意思,这个例子就是AppTheme主题继承了android自身的Theme.Light,设置字体为serif(android自带的其他两种字体是sans,monospace)

其他的一些常用的android原生的Theme:
Theme.NoTitleBar : 不显示应用程序标题栏

Theme.NoTitleBar.Fullscreen : 不显示应用程序标题栏,并全屏



Theme.Light : 背景为白色

Theme.Light.NoTitleBar : 白色背景并无标题栏

Theme.Light.NoTitleBar.Fullscreen : 白色背景,无标题栏,全屏



Theme.Black : 背景黑色

Theme.Black.NoTitleBar : 黑色背景并无标题栏

Theme.Black.NoTitleBar.Fullscreen : 黑色背景,无标题栏,全屏



Theme.Wallpaper : 用系统桌面为应用程序背景

Theme.Wallpaper.NoTitleBar : 用系统桌面为应用程序背景,且无标题栏

Theme.Wallpaper.NoTitleBar.Fullscreen : 用系统桌面为应用程序背景,无标题栏,全屏



Theme.Translucent : 透明背景

Theme.Translucent.NoTitleBar : 透明背景并无标题

Theme.Translucent.NoTitleBar.Fullscreen : 透明背景并无标题,全屏



Theme.Panel : 面板风格显示

Theme.Light.Panel : 平板风格显示

2.定义一个Style

定义style的方式还是和定义theme一样的,也是在style文件夹下面写属性
  <style name="btnStyle">
<item name="android:paddingTop">10dp</item>
<item name="android:paddingBottom">10dp</item>
<item name="android:background">#FF8C00</item>
<item name="android:textSize">14sp</item>
<item name="android:typeface">monospace</item>
</style>

调用很简单:


    <Button
android:id="@+id/MyButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/btnStyle"
android:text="@string/Hello" />
那style是不是可以继承?答案是当然的,style和theme一样,也是可以继承android自身,或者继承自定义的样式。

继承自定义的样式
 <style name="text">
<item name="android:typeface">monospace</item>
</style>
<style parent="text" name="text.title">
<item name="android:textSize">30sp</item>
</style>

继承android自身的样式

<style name="Dialog.custom" parent="android:Theme.Dialog">
<item name="android:windowBackground">@drawable/dialog_bg</item>
</style>

总结:虽然style和theme的区别还是很好理解的,但是用起来还不是很顺手的,只有在实践中不断磨练,才能把style和theme合理利用好,才能把用户体验做的更好,忽然想起那句很牛逼的话,“以技术驱动业务发展”,如果界面做的好的话,也一定能给用户带来不一样的感受。

虽然简单,但有时候总结也是一种收获。


作者:张林

原文地址:http://blog.csdn.net/kebi007/article/details/53576380原文标题:Xamarin Android中style和theme的区别

转载随意!

Android中style和theme的区别的更多相关文章

  1. Android中Style和Theme的使用

    Style: Style是View中一些属性的集合,包括height,padding,font color,background等等,Style单独定义在xml文件中,类似与web页面中css的角色, ...

  2. 【整理】Android中的gravity和layout_gravity区别

    [背景] 在Android中,想要设置个按钮的水平对齐,都累死了: [已解决]ADT中已设置TableLayout布局的情况下如何设置按钮居中对齐    所以现在有必要搞清楚,到底gravity和la ...

  3. Android:Style和Theme

    在Web开发中,Html负责内容,CSS负责表现.同样,在Android开发中,可以使用Theme.Style+UI组件的方式实现内容和形式的分离. Style是针对窗体元素级别的,改变指定控件或者L ...

  4. Android中px和dip的区别

    在Android手机的诞生之初,由于Android系统是开源的,一开始便有众多的OEM厂商对Android手机进行深度定制,于是乎Android手机的皮肤和屏幕大小都变得百花齐放,这可苦逼了我们这群开 ...

  5. 浅谈Android中Serializable和Parcelable使用区别

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 Android开发的时候,我们时长遇到传递对象的需求,但是我们无法将对象的引用传给Activity或者Fragment,我们需要将这些对象 ...

  6. Android中Popupwindow和Dialog的区别

    Android中的对话框有两种:PopupWindow和AlertDialog.它们都可以实现弹窗功能,但是他们之间有一些差别,下面总结了一点. (1)Popupwindow在显示之前一定要设置宽高, ...

  7. 【Android】android中Invalidate和postInvalidate的区别

    Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Inva ...

  8. android中Invalidate和postInvalidate的区别

    Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Inva ...

  9. [转]Android 中fill_parent与wrap_content的区别

        在Android中,对于组件的属性“layout_width”和“layout_height”, 其值总是设置为“wrap_content”或“fill_parent”. 那么,这两个值有什么 ...

随机推荐

  1. 02-线性结构4 Pop Sequence

    题目 Sample Input: 5 7 5 1 2 3 4 5 6 7 3 2 1 7 5 6 4 7 6 5 4 3 2 1 5 6 4 3 7 2 1 1 7 6 5 4 3 2 Sample ...

  2. java基础回顾(一)

    java的特点:开源.安全.跨平台.简单易懂.一次编译可多处运行. JDK:java开发工具包 JDK = JRE+JAVA开发工具 保证能够实现java开发的最小单元 JRE:java运行环境 JR ...

  3. selenium+python对页面元素进行高亮显示

    调用js方法: execute_script(script,*args) Arguments对象: 类数组对象,代表传给一个function的参数列表,当前函数的内置属性,其长度是由实参个数决定而不是 ...

  4. IntelliJ IDEA(三) :常用快捷键

    说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握了所有IDEA的快捷键使用,那么你完全可以丢掉鼠标,而且不影响开 ...

  5. ACM HDU 1559 最大子矩阵

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1559 这道题 挺好的,当时想出解法的时候已经比较迟了.还是平时看得少. 把行与列都进行压缩.ans[i ...

  6. zzuli 1816: 矩形 排序思维

    1816: 矩形 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 179  Solved: 54 SubmitStatusWeb Board Descr ...

  7. CCF-201509-1-数列分段

    问题描述 试题编号: 201509-1 试题名称: 数列分段 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共 ...

  8. 【Codeforces 788C】The Great Mixing

    http://codeforces.com/contest/788/problem/C 显然如果有两杯一样的酒,把它们当作同一杯就好了.所以k<=1e6毫无意义. 若选的x杯酒的浓度分别为a,b ...

  9. NOI导刊2010提高装备运输

    www.luogu.org/problem/show?pid=1794 挺裸的一题背包,算很基础. 可以运用的技巧是三维->二维(节省空间还能少敲一点代码 #include<iostrea ...

  10. 参加完Rocket MQ Meetup深圳站,回顾和想法

    最近一段时间才开始关注云栖社区的公众号,在两周前看到要在深圳科兴科学园办一场Rocket MQ的Meetup.因为从来没有参加过这种线下活动,而且对Rocket MQ比较感兴趣,所以就立即报名参加. ...