移动开发最新Android界面开发之样式定义(Defining Styles),android面试经验

最后的最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的

最后,互联网不存在所谓的寒冬,只是你没有努力罢了!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

category:Android Dev Guide

style是用于指定View或window的外观和格式的一系列属性的集合。style可以指定高(height)、填补(padding)、字体颜色、字体大小、背景颜色等等属性。style定义在不同于用来设置布局的XML资源中。

Android中的Syles与网页设计中的层叠样式表有着相似的原理——允许你将设计从内容中分离出来。

例如,使用一个style,你可以将下面这个布局:

变成这样:

所有与style相关的属性从XML布局中移出,放到一个名为CodeFont 的style定义中,通过style属性应用。你将在以下章节中看到此类style的定义。

theme是一个应用于整个Activity或应用中,而不是某一个单独的View(正如上面的例子)。当一个style被作为theme来应用时,Activity或应用中的每个View都将应用支持的每个style属性。例如,你能把CodeFont style作为theme应用于一个Activity,那么这个Activity中所有文本都将是绿色等宽字体。

定义样式 - Defining Styles

======================

创建一套style,需保存一个XML文件到你的工程的res/values/ 文件夹中。

这个XML文件的根节点必须是 。

为每个要创建的style,添加一个用来唯一标识此style的 元素到文件中(这个属性是必需的)。然后为style的每个属性添加一个name 和一个使用的值(这个属性是必需的)。这个 的值可以是一个关键字符串、十六进制颜色、到另一个资源类型的引用或其他值,取决于style的属性。这里有一个单独style的例子:

<?xml version"utf-8"?>

fill_parent

wrap_content

#00FF00

monospace

每个 元素的@style/CodeFont 在一个XML布局中引用(正如上面的介绍)。

在parent 属性是可选的,用来指定另一个style资源的ID,前者继承后者的所有属性。你可以复写继承的style属性,如果你想要那样做。

记住,你想要用作一个Activity或应用theme的style,与在XML中定义一个View的style方法是一样的。一个如同上面那样定义的style可以应用于一个View的style,或是整个Activity或应用的theme。稍后讨论如何将一个style应用于一个View或一个应用theme中。

继承 - Inheritance


parent 属性让你能够从指定的style中继承属性。你可以通过这种途径从一个现有的style中继承属性,然后定义你想改变或添加的属性。你可以从你自己创建的style或平台内创建的style中继承。(参阅Using Platform Styles and Themes,以获取关于继承Android平台预定义的style的信息。)例如,你可以继承Android平台默认文本外观并修改:

#00FF00

如果你想要继承你自己定义的style,你不必使用CodeFont 的style,把颜色改为红色,你可以像这样编写新的style:

#FF0000

注意在parent 属性,因为CodeFont 起始(你已经创建的style),这个style继承所有style属性。这个style复写@style/CodeFont.Red 引用这个新style。

你可以像这样继续继承很多次,只要修改句点之前的名称。例如,你可以扩展CodeFont.Red 使字体变大:

30sp

从CodeFont.Red style中同时继承,然后添加android:textSize 属性。

* 注意:* 这种技巧仅适用于将你自己定义的资源链接起来。你不能用这种方式继承Android内建的style。要引用一个诸如TextAppearance的内建style,你必须使用parent 属性。

样式属性 - Style Properties


到目前,你已明白了一个style是如何定义的,你需要学习由 元素定义的哪些属性是可用的。你很可能已经熟悉了某些,比如layout_widthtextColor。当然,有更多的style属性供你使用。

找到适用于某个特定View的属性的最佳方法是相应的类的参考,其中列出了所有支持的XML属性。例如,在表格TextView XML attributes中列出的所有属性可以用在TextView元素(或它的一个子类)的style定义中。其中列出的一个属性是android:inputType,那么你通常可能将android:inputType属性放置在 元素中,像这样:

你也可以为包含这个属性的EditText元素创建一个style:

number

所以你的布局XML现在可以这样实现这个style:

这个简单的例子看起来增加了工作量,但当你添加越来越多的style属性并考虑到此style在不同地方的可重用性时,你会发现获益是巨大的。

关于所有可用的style属性,请参见R.attr。记住所有的View对象并不接受相同的style属性,所以你通常应该参考特定的View类,查看其所支持的style属性。但是,如果你对一个View应用了style,而其并不支持此style中某些属性,那么此View将应用那些它支持的属性,并简单忽略那些不支持的。

然而一些style属性只能被当作一个theme来应用,而不支持任何View元素。这些style属性应用到整个窗口,而不是任何类型的View。例如那些用于隐藏应用标题、隐藏状态栏或改变窗口背景的style属性。这些style属性不属于任何View对象。探究这些仅应用作theme的style属性,参见R.attr中那些以windowNoTitle 和windowBackground 是仅当style作为theme应用于一个Activity或应用时才有效的style属性。参阅下一节,获得关于style应用作theme的信息。

* 注意:* 不要忘记对每个android: 命名空间前缀。例如: 。

样式和主题应用到UI - Applying Styles and Themes to the UI

=================================================

有两种方式来设置style:

* 对一个独立的View,添加style 属性到你的布局XML中的View元素中。

* 或者,对一个Activity或应用添加 或 元素中。

当你应用一个style到布局中一个单独的View上,由此style定义的属性会仅应用于那个View。如果一个style应用到一个ViewGroup上,那么子View元素并不会继承应用此style属性——只有你直接应用了style的元素才会应用其属性。然而,你可以通过将其作为theme来应用的方式应用一个style到所有View元素上。

将一个style作为一个theme来应用,你必须在Android manifest中将其应用到一个Activity或应用中。当你这样做,此Activity或应用中的每个View都将应用其所支持的属性。例如,如果你应用前面示例中的CodeFont style到一个Activity,那么支持此文本style属性的所有View元素都将应用它们。所有View所不支持的属性都会被忽略。如果一个View仅支持某些属性,那么它就只应用那些属性。

为视图套用样式 - Apply a style to a View


下面是如何在XML布局中为View设置style的方法:

现在这个TextView将应用名为CodeFont 的style所定义的属性。(参阅前面在Defining Styles中的示例)。

* 注意:* style属性不能使用android: 命名空间前缀。

在Activity或应用程序中应用主题 - Apply a theme to an Activity or application


对你的应用程序中所有activity设置一个theme,打开 标签,使之包含android:theme 属性和style名称。例如:

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

初学者,一句话,多练。*

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值