❶ 怎么把android ui设计的好看
最主要在设计的时候不要完全按照自己的喜好来,适当的遵循规范再加之大众审美评估水平来设计即可。
1、注意字体的缓行大小。安卓里面也有森带相应的规范,比如最小字体是多大,文本是多大,按照规范来设计的话就可以保证我们的界面图整体看起来更加的美观。
2、在使此哪芦用的字体方面,也是有一个严格的规定,英文在安卓里面使用的是Roboto,中文字体使用的是droid sans fallback,当然现在随着安卓手机分辨率的增加, 中文,字体的选择也多了几种,比如中文也可以使用思源黑体等。
3、一般PS新建 1080 x 1920的尺寸,也就是对应该安卓的xxhdpi ,所以切图也是放入程序中的xxhdpi文件夹 下。设计时一定好考虑好小屏幕适配问题,还要对部分切图进行调整重切,因为有些图等比缩小时会出现糊,或不好看的现象。
❷ 《Android编程权威指南》这本书翻译的怎么样
原书名:Androidprogramming:thebignerdranchguide原出版社:BigNerdRanchGuides作者:(美)BillPhillipsBrianHardy译者:王明发丛书名:图灵程序设计丛书出版社:人民邮电出版社ISBN:9787115346438上架时间:2014-3-18出版日期:2014年4月开本:16开页码:523版次:1-1所属分类:计算机>软件与程序设计>移动开发>Android编辑推荐Amazon榜首畅销书全面覆盖Android开发知识点全真示例、循循善诱、轻松上手内容简介书籍计算机书籍BigNerdRanch是美国一家专业的移动开发技术培训机构,《Android编程权威指南》主要以训练营的5天教学课程为基础,融合了两位作者多年的心得体会,是一本完全面向实战的Android编程权威指南。全书共37章,详细介绍了GeoQuiz、HelloMoon、DragAndDraw等8个Android应用。这些应用的难易程度不一,最复杂的CriminalIntent应用占用了13章的篇幅。通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得最前沿的开发经验。如果你熟悉Java语言,或者了解对面向对象编程,那就立刻开始Android编程之旅吧!作译者BillPhillipsBigNerdRanch资深Android讲师、高级软件工程师。他与BrianHardy合作,为BigNerdRanch开发了广受好评的5天Android训练营培训课程。Bill擅长透彻地理解事物的本质,并帮助其他人做到这一点。闲暇时间,Bill喜欢阅读和弹钢琴。BrianHardyBigNerdRanch首席软件工程师、资深讲师。BigNerdRanch的Android、iOS和Ruby培训课程均由Brian设计开发。闲暇时间,Brian喜欢骑自行车和听音乐。目录《Android编程权威指南》第1章Android应用初体验11.1应用基础21.2创建Android项目21.3Eclipse工作区导航51.4用户界面设计61.4.1视图层级结构91.4.2组件属性101.4.3创建字符串资源111.4.4预览界面布局121.5从布局XML到视图对象131.6组件的实际应用151.6.1类包组织导入161.6.2引用组件161.6.3设置监听器171.7使用模拟器运行应用211.8Android编译过程22第2章Android与MVC设计模式262.1创建新类262.2Android与MVC设计模式30↓全部内容译者序2007年,苹果公司发布了革命性的iPhone,自此开启了智能手机的新时代。随后,2008年,谷歌公司和开放手机联盟共同开发并推出了Android智能手机。时至今日,移动智能设备不仅深刻影响了智能手机行业,也改变了整个科技产业以及人们生活的方方面面,在全球掀起巨大的移动浪潮。迎着这股浪潮,国际巨头、创业公司、独立开发者各展身手,奋力搏击,抢登浪潮之巅。苹果一度成了全球市值最高的公司,三星则是卖出了数亿部Android手机。2013年,网络以19亿美元的价格收购了91无线。2014年开春,Facebook更是以190亿美元的天价收购了开发WhatsApp应用仅有50名员工的公司,直接把这股移动浪潮推到了巅峰。豪不夸张地说,所有这一切都离不开移动软件的开发。目前主流的开发平台是苹果的iOS系统和谷歌的Android系统。凭借精美绝伦的UI、流畅顺滑的交互体验,iOS开发在早期抢占了先机。但如今,谷歌在Android系统UI设计及优化方面的前进步伐已赶超苹果在创新方面的进步。越来越多的软件人开始投身Android应用开发阵营。对于业余爱好者来说,Android还是iOS,喜欢谁就选谁。而对于专业开发人员,果粉也好,Android迷也罢,从职业发展及商业利益角度来说,掌握双平台开发是必须的。作为荣获2012Jolt生产力大奖的iOS编程教程的姊妹篇,BigNerdRanch公司再接再厉,推出了这本《Android编程权威指南》。英文版甫一上架立即赢得了Amazon读者的广泛赞誉。本书基于BigNerdRanch公司的Bootcamp教程编写而成。BigNerdRanch创于2001年,是美国一家知名IT培训公司,每年为微软、谷歌、Faceboook等行业巨头培养众多专业人才。而BootCamp在英文中原意为美国海军陆战队新兵训练营,应用于IT培训行业中,意指通过全真IT项目实战,培训出像美国海军陆战队员那样优秀的IT人才。本书适合有一定Java编程经验(至少熟悉Java)并对Android开发感兴趣的读者阅读。本书最大的特点是,从Android应用的基本概念及组成开始介绍直至完成一个复杂实用的谷歌地图应用,作者巧妙地把Android开发所需的庞杂知识、行业实践、编程规范等融入本书,并以一种润物无声的导学方式引领读者轻松完成全书的开发学习。第26章在讲解后台任务和线程时,作者寓教于乐,还精心安排了在鞋店工作的闪电侠案例,既能帮助读者形象地理解复杂抽象概念,又让人印象深刻,难以忘却。类似这样的案例、幽默全书俯拾皆是,还是等读者自己去发掘吧。另外,几乎每章都配有深入学习及难度逐步升级的挑战练习版块。深入学习意在让读者进一步掌握本章关键知识点并指明学习更高级主题的方向;挑战练习能够让读者立即获得练手的机会,通过练习巩固运用所学知识。学完本书,在实际开发中,读者自然而然就会知道该做什么,如何去做以及为什么这样做。最后,感谢图灵各位编辑老师的辛勤工作,尤其感谢李静老师的细心指导,本书及本人都获益良多。更要感谢的是我的clover和千寻,没有他们的宽容、理解与支持,本书译稿不可能完成。虽然我已尽力传达原作本意并保证译稿的较高质量,但有时拼写错误、因版本升级而导致某些内容不再适用,甚至是囿于个人水平而犯错的情况再所难免。如果你发现了问题或有好的建议,请批评指正并不吝电邮提交至[email protected]或反馈至图灵社区。2014年2月28日于上海
❸ 32个实用酷炫的Android开源UI框架
1.Side-Menu.Android
分类侧滑菜单 , Yalantis 出品。
项目地址: https://github.com/Yalantis/Side-Menu.Android
2.Context-Menu.Android
可以方便快速集成漂亮带有动画效果的上下文菜单, Yalantis 出品。
项目地址: https://github.com/Yalantis/Context-Menu.Android
3.Pull-to-Refresh.Rentals-Android
提供一个简单可以自定义的 下拉刷新 实现,Yalantis 出品。
项目地址: https://github.com/Yalantis/Pull-to-Refresh.Rentals-Android
4.Titanic
可以显示水位上升下降的TextView
项目地址: https://github.com/RomainPiel/Titanic
5.AndroidSwipeLayout
滑动Layout ,支持单个View,ListView,GridView
项目地址: https://github.com/daimajia/AndroidSwipeLayout
Demo地址: Download Demo
6.Android Typeface Helper
可以帮你轻松实现自定义字体的库
项目地址: https://github.com/norbsoft/android-typeface-helper
7.android-lockpattern
Android的图案密码解锁
项目地址: https://code.google.com/p/android-lockpattern/
Demo地址: https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo
文档介绍: https://code.google.com/p/android-lockpattern/wiki/QuickUse
APP示例:Android开机的图案密码解锁,支付宝的密码解锁
8.ToggleButton
状态切换的 Button,类似 iOS,用 View 实现
项目地址: https://github.com/zcweng/ToggleButton
9.WilliamChart
绘制图表的库,支持LineChartView、BarChartView和StackBarChartView三中图表类型,并且支持 Android 2.2及以上的系统。
项目地址: https://github.com/diogobernardino/WilliamChart
Demo地址: https://play.google.com/store/apps/details?id=com.db.williamchartdemo
Demo项目: https://github.com/diogobernardino/WilliamChart/tree/master/sample
10.实现滑动ViewPager渐变背景色
项目地址: https://github.com/TaurusXi/GuideBackgroundColorAnimation
11.Euclid
用户简历界面, Yalantis 出品。
项目地址: https://github.com/Yalantis/Euclid
12. InstaMaterial
Instagram的一组Material 风格的概念设计
项目地址: https://github.com/frogermcs/InstaMaterial
13. SpringIndicator
使用bezier实现粘连效果的页面指示
项目地址: https://github.com/chenupt/SpringIndicator
14. BezierDemo
仿qq消息气泡拖拽 消失的效果。
项目地址: https://github.com/chenupt/BezierDemo
15. FoldableLayout
折叠的信纸被打开一样的动画效果
项目地址: https://github.com/alexvasilkov/FoldableLayout
16.Taurus
下拉刷新,Yalantis 出品。(是不是有点似曾相识呢?)
项目地址: https://github.com/Yalantis/Taurus
17. PersistentSearch
在点击搜索的时候控件在原有位置显示输入框。
项目地址: https://github.com/Quinny898/PersistentSearch
18. circular-progress-button
带进度显示的Button
项目地址: https://github.com/dmytrodanylyk/circular-progress-button
19. discrollview
当上下滚动的时候子元素会呈现不同动画效果的scrollView,网页上称之为:视差滚动
项目地址: https://github.com/flavienlaurent/discrollview
20. sweet-alert-dialog
一个带动画效果的 自定义对话框样式
项目地址: https://github.com/pedant/sweet-alert-dialog
21. android-floating-action-button
Material Desig风格的 浮动操作按钮
项目地址: https://github.com/futuresimple/android-floating-action-button
22. android-collapse-calendar-view
可以在月视图与周视图之间切换的calendar控件
项目地址: https://github.com/blazsolar/android-collapse-calendar-view
22. android-collapse-calendar-view
可以在月视图与周视图之间切换的calendar控件
项目地址: https://github.com/blazsolar/android-collapse-calendar-view
23. NumberProgressBar
个简约性感的数字进度条
项目地址: https://github.com/daimajia/NumberProgressBar
24. CircularProgressView
CircularProgressView 是通过自定义view的方式实现的Material风格的加载提示控件,兼容任何版本。
项目地址: https://github.com/rahatarmanahmed/CircularProgressView
25. OriSim3D-Android
opengl 实现了各种折纸效果,模拟了从一张纸折叠成一条船的整个过程
项目地址: https://github.com/RemiKoutcherawy/OriSim3D-Android
26、万能日历控件:CalendarView
GitHub: https://github.com/huanghaibin-dev/CalendarView
中文使用文档: https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION_ZH.md
27、大图查看器: BigImage ImageView ViewPager
Github: https://github.com/SherlockGougou/BigImageViewPager
地址: https://www.jianshu.com/p/b15e65791c3f
支持超长图、超大图的图片浏览器,优化内存,支持手势放大、下拉关闭、查看原图、加载百分比、保存图片等功能。现已支持androidx。
28、安卓工具包androidUntilCode(安卓必备)
Github: https://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md
29、万能适配器-BRAVH
官网: http://www.recyclerview.org
GitHub: https://github.com/CymChad/BaseRecyclerViewAdapterHelper
RecyclerView
作为Android最常用的控件之一,是否常常为“她”操碎了心
BRVAH受益群体是所有Android开发者,希望更多开发者能够一起来把这个项目做得更好帮助更多人
30、智能刷新控件--SmartRefreshLayout
GitHub: https://github.com/scwang90/SmartRefreshLayout
中文: https://gitee.com/scwang90/SmartRefreshLayout
SmartRefreshLayout以打造一个强大,稳定,成熟的下拉刷新框架为目标,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout , 其他第三方的 Ultra-Pull-To-Refresh 、 TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。
31、内存泄漏检测工具--leakcanary
使用方式: https://www.jianshu.com/p/b83ddffcb3b5
LeakCanary是Square公司基于MAT开源的一个工具,用来检测Android App中的内存泄露问题。官方地址: https://github.com/square/leakcanary
32、 1218683832 / AndroidSlidingUpPanel
SlidingUpPanelLayout:可以上下滑动的菜单布
https://github.com/1218683832/AndroidSlidingUpPanel
❹ Android UI 的设计规则
一. Launcher(启动图标):
1.在背景下易见;
2.尺寸 Phone: 48*48 dp
Google Play: 512*512 pixels
3.风格:任意轮廓。三维,正视图,稍微透视看起来像从顶部往下看(使用户有深度感)。
二. Action Bar(工具栏):工具栏图标为图片按钮
1.尺寸: phone下为32*32dp
2.焦点区比例: 光学直角区可为24*24dp
3.风格: 象形,平淡,不要太详细,光滑曲线或尖锐的形状。若图片偏窄,可转动45度角以填充焦点区,笔画宽度与空白宽度至少为2dp
4.颜色: #333333 激活:60%不透明 禁用:30%不透明
#FFFFFF 激活:80%不透明 禁用:30%不透明
三. Small/Contextual Icons(小的上下文图标):用于为动作和状态提供特殊项目
1.尺寸: 16*16dp
2.焦点区域与比例: 全部为16*16dp, 光学直角区域为12*12dp
3.风格: 中性,平淡,简单。填充的形状比简单的笔画易见。使用简单的视觉暗示以便用户能轻易读懂。
4.颜色: 使用少量的非中性颜色。激活时与背景形成对比。
四. Notification Icons(通知图标)
1.尺寸: 必须为24*24dp
2.焦点区域与比例: 全部区域24*24dp 光学直角区域22*22dp。
3.风格: 平实简单,与启动图标一样使用视觉暗示。
4.颜色: 全白,也可以使其根据系统变暗。
专题二、设计原则:
一. 使用户着迷:
1.用惊艳吸引人:漂亮界面、动画、声音……
2.实际对象比按钮和菜单更有趣:使用户能直接触摸和控制App中的对象
3.使成为自己的:既有默认的,又可以进行自定义设置
4.了解学习用户所需:学习用户爱好与习惯,而不是要求用户单调的做
二. 让生活简单化:
1.保持简洁:用短语
2.图片比文字更快:用图片解释想法
3.替用户做决定,但最终决定权在于用户:不是一开始就问,先猜测,允许撤销
4.只显示用户正需要的:将任务和信息分块,隐藏不是必须的选项
5.用户一直要知道自己在哪:在屏幕间用切换显示关系,提供任务反馈
6.从不丢失:保存用户花时间创建的,并让他们可以从任何地方接入,记住设置、个人触摸和创建
7.看起来一样,功能也一样:外观、模式差不多的操作都要相近
8.重要的时候才打扰用户:一个好的个人助手,会避免掉不重要的事情,使用户能集中精力
三. 让用户兴奋起来:
1.给用户所有地方都能使用的技巧:使应用程序简单易学
2.不是我的错:绅士的让用户做修正,如果出错,给出恢复指导但省略科技细节
3.给出鼓励(回馈):将复杂任务切成易于完成的小步骤,在用户动作后给出回馈,例如一个光晕
4.为用户完成繁重的事务:使新手做他们认为自己不会做的事情,而且做得像专家一样。例如多种照相功能的快捷键使业余爱好者通过简单几步就能完成
5.让重要的事情更快:将App中最重要的部分更容易找到,更快使用,像照相机的快捷键、音乐播放器的暂停键等。
专题三、书写风格:
一. 使用户着迷:
1.保持简洁:简明、简单、精确
2.保持简单:使用简短单词、动词和名词
3.友好:用第二人称你称呼用户,使用户感觉安全、快乐和激情
4.重要的事放在前
5.避免重复
❺ Android UI规范是什么
从事UI设计行业的朋友都知道,每一张设计稿都是有规范尺寸的,并且IOS的和Android还不同,IOS UI设计规范为375*667 1x的尺寸,那么Android UI规范是什么呢,下面让我们一起来了解一下。
在做Android UI设计的时候,画布的尺寸我们一般都是选择360*640 1x,也就是说是选择720*1280这个尺寸。
我们从上到下来进行了解,最上边的是状态栏,状态栏的高度是25。
在状态栏中肯定就是信号、电源以及时间这些了,每个Android定制系统的摆放样式都不同,这一点不用纠结。
状态栏下边就是导航栏了,导航栏起到的是导航作用,高度是45px。
导航栏中间一般都是有文字来起到提醒作用的,导航文字的大小一般都是18px。
在最下方就是我们的标签栏了,标签栏的作用就是给用户提供切换界面的作用,标签栏的高度为50px。
在标签栏中摆放的肯定就是我们的ICON图标了,要注意,图标的切图点击区域不能够小于24px。
一些ICON图标的下方还会有文本,这里文本的大小一般就是10或者是11px了,因为范围有限。
本文尺寸均为1x。
❻ android系统中有哪三种常用的ui设计方式
Android 资源类型
1.字符串资源
>>1.普通字符串
>>2.字符串数组
复制代码
<resources>
<string-array name="planets_array">
<item>aaa</item>
<item>bbb</item>
</string-array>
</resources>
复制代码
获取方式:getResources().getStringArray(R.array.planets_array)
>>3.复数字符串资源
某些自然语言中,不同的数字在使用方法上会有所不同,比如one book,two books。当数量大于1时,会使用不同的名词或其它复数形式;
复制代码
<resources>
<plurals name="numberOfp">
<item quantity="one">one person</item>
<item quantity="other">more persons</item>
</plurals>
</resources>
复制代码
quantity属性的值除了one和other外,还可以是zero,two,few,many;
引用复数字符串:
// 引用数字为1的复数字符串
getResources().getQuantityString(R.pluarlas.numberOfp,1);
// 引用数字为其它值的复数字符串
getResources().getQuantityString(R.pluarlas.numberOfp,10,10);
>>4.占位符格式化字符串
常用的格式化字符串三种方法:
>>1.在字符串中使用引号
字符串中的值虽然可以随意指定,但是当遇到特殊符号时(双引号,单引号)就需要采取特殊的方法来处理这些符号。
如果是单引号(')可以使用转义符(\)或用双引号(")将整个字符串括起来,如果是双引号,可以在双引号前使用转义符(\)。
<resources>
<string name="str1">"This'll work"</string> This'll work
<string name="str2">This\'ll work</string> This'll work
<string name="str3">\"apple\"</string> "apple"
</resources>
>>2.用占位符格式化字符串
使用String.format(String,Object...)方法可以格式化带占位符的字符串,只需要在字符串中插入占位符,就可以使用String.format方法格式化字符串资源,format方法要求的占位符用%1,%,...,%n,其实第n个占位符与format方法的n+1个参数值对应;
<resources>
<!-- $s表示该占位符被字符串替换,$d表示该占位符被整数替换 -->
<string name="str1">hello,%1$s!You have %2$d new message</string>
</resources>
String str1 =String.format(getResources().getString(R.string.str1), "ly", 17);
>>3.使用HTML标签格式化字符串资源
字符串资源支持一些HTML标签,因此可以直接在字符串资源中使用这些HTML标签格式化字符串
字符串资源支持如下的HTML标签
<b>粗体字
<i>斜体定
<u>带下划线的字
有时需要同时使用HTML标签和占位符格式化字符串,如果使用String.format方法格式化字符串,会忽略字符串中的所有HTML标签。为了使format方法可以格式化带
HTML标签的确字符,需要使用Html.formHTML方法处理字符串;
<resources>
<string name="hello_world">Welcome to <b>android</b></string>
<string name="str2">Hello,%1$s! You have <b> %2d new messages </b></string> <!--同时包含占位符和html标签的字符串-->
</resources>
由于需要使用Html.formHTML方法处理字符串,因此HTML标签中的 "<" 需要使用 "<" 表示 ">" 并不需要处理
获取字符串:
String text = String.format(getResources().getString(R.string.str2), "ly", 10);
CharSequence styledText = Html.fromHtml(text);
// 如果format的某个参数包含HTML的特殊字符,如"<","&",可以使用如下方式读取字符串的值;
String escapedUsername = TextUtils.htmlEncode("");
String text1 = String.format(getResources().getString(R.string.str2), "ly", 20);
2.Layout资源
1、如果根节点是View,除了<requestFocus>标签外,不能添加任何子标签,<requestFocus>可能被添加到布局文件的任何View中,表示该标签对应的控件在显示时处于焦点状态,整个布局文件只能有一个<requestFocus>标签
2、根节点是ViewGroup,常用的布局都是ViewGroup的子类
3、重用布局文件
如果想重用某个布局文件,可以使用<include>标签
<include layout="@layout/xx_layout" />
如果想让一个布局文件被另一个布局文件引用(使用<include>标签),可以使用<merge>作为被引用布局文件的根节点,由于<merge>并不会生成任何标签(在大量引用布局文件时不至于生成大量无用的标签),但是xml文件必须要有一个根节点,因此<merge>所起的作用就是作为xml文件的根节点,以使xml文件在编译时不至于出错,可以把<merge>当成<FrameLayout>使用;
3.图像资源
在图像资源中可以存储图像文件,还可以使用xml格式的图像资源来控件图像的状态和行为;
>>1.普通图像资源
Drawable da = getResources().getDrawable(R.drawable.xxx);
>>2.xml图像资源
xml图像资源其实就是在drawable目录中指定的xml文件,此种方式可以额外指定图像的某些属性,如图像拉动、排列方式;
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_launcher"
android:tileMode="repeat" >
</bitmap>
>>3.Nine-Patch图像资源
Nine-Patch图像资源文件必须以9.png作为文件扩展名,如abc.9.png
该图像资源的主要作用是:防止图像的某一部分被拉伸;确定将图像作为背景图的控件中内容显示的位置;
Android SDK本身提供了一个Draw 9-patch的工具,启动<sdk目录>\tools\draw9patch.bat命令启动该工具;
可以通过此工具在png图的四周绘制1个像素粗的直线,上边缘和左边缘的直线分别表示图像在水平和垂直方向可位值的范围。如果水平或垂直方向的某个区域不需要拉伸,则可不绘制相应的直线;右边缘和下边缘的直线分别表示图像所在控件中内容的显示范围,内容只在右边缘和下边缘绘制直线的区域显示,表示内容显示范围和拉伸范围的两给直线有一个重要区别就是表示内容显示范围的直线中间不能断开,而表示拉伸范围的直线中间可以断开;
Nine-Patch图像资源与普通图像资源引用方法相同,在引用时只写文件名,活力.9.png;
>>4.XML Nine-Patch图像资源
Nine-Patch图像资源也有与其对应的xml图像资源,使用<nine-patch>标签来引用Nine-Patch格式的图像,有一个设置抖动的android:dither属性;
>>5.图层资源
图层资源类似于<FrameLayout>不同的是<FrameLayout>标签中可以包含任意的控件,而图层资源每一层都只有是图像,定义图层资源必须使用<layer-list>作为资源文件的根节点,<layer-list>标签中包含多个<item>标签,每一个标签表示一个图像,最后一个<item>标签显示在最顶层;
默认情况下,图像会尽量充满显示图像的范围,图像可能会有拉伸,为了避免图像拉伸,可以在<item>标签中使用<bitmap>标签引用图像;
复制代码
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="10dip" 底端偏移的像素
android:left="10dip" 左侧偏移的像素
android:right="10dip" ...
android:top="10dip"> ...
<bitmap
android:gravity="center"
android:src="@drawable/hell" />
</item>
</layer-list>
复制代码
某些情况下,可以使用图层来代替<FrameLayout>
>>6.图像状态资源,处理控件不同状态下的显示状态
复制代码
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bm" android:state_focused="true"></item>
<item android:drawable="@drawable/bm" android:state_pressed="true"></item>
<item android:drawable="@drawable/bm"></item>
</selector>
// android:state_focused/pressed设置为true表示当前item的drawable属性为获取焦点和按下时的drawable样式
复制代码
>>7.图像级别(Level)资源
图像资源状态只能指定几种有限的状态,可以通过图像级别指定更多的状态;图像级别是一个整数的区间,可以通过ImageView.setImageLevel或Drawable.setLevel方法切换不同状态的图像;图像级别资源是xml文件,必须以<level-list>为根节点,每一个item表示一个级别区间,下面是一个xml文件;通过ImageView.setImageLevel(level),根据level所在的区间设定显示的图像资源,如果level不在任一区间内则清空ImageView当前图像;
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="2" android:minLevel="0" android:drawable="@drawable/hell" />
<item android:maxLevel="4" android:minLevel="3" android:drawable="@drawable/hell" />
</level-list>
>>8.淡入淡出(Cross-fade)资源
也是切换两个图像(不支持多于两个图像的切换),并且使这两个图像以淡入淡出效果进行切换,如电灯在开关时逐渐变亮或逐渐变暗;
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/hell"/>
<item android:drawable="@drawable/hell"/>
</transition>
TransitionDrawable da = ...;
// 从第一张图片切换到第二张图片,时间效果为1秒
da.startTransition(1000);
// 从第二张图片切换到第一张图片,时间效果为1秒
da.reverseTransition(1000);
>>9.嵌入(insert)图像资源
使用场景:要显示的图像要求要小于装载图像的View(图小于View区域),也是通过xml资源定义,只有一个节点inset。
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:insetLeft="10dip" > <!--图像距离左边的距离,延伸-->上/下/右的距离-->
</inset>
>>10.剪切(Clip)图像资源,使用剪切图像资源可以只显示图像的一部分,如可以通过此来制作进度条;
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal" // 指定截取的方向
android:drawable="@drawable/hell" // 指定要截取的图像
android:gravity="left" > // 指定截取的方式,在此为从左侧开始截取
</clip>
ClipDrawable cd = ...;
cd.setLevel(1000);
上面ClipDrawable.setLevel(level)设置截取的图像宽度,ClipDrawable预设了最大值10000(表示不进行截取),最小值为0(表示不显示);
>>11. 比例(Scale)图像资源
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:scaleGravity="center" // 设置图像显示的位置
android:scaleHeight="70%" // 设置图像显示的高度
android:scaleWidth="80%" > // 设置图像显示的宽度
</scale>
>>12.形状资源
复制代码
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > shape可以指定就矩形,oval(椭圆),line(直线),ring(圆)
<corners> 定义圆角
</corners>
<gradient
android:angle="45"
android:startColor="#000000"
android:endColor="#FFFFFF" > 定义颜色渐变,从左下角到或上角
</gradient>
<padding> 定义控件内容到边框的距离
</padding>
<stroke> 定义边线
</stroke>
<solid> 定义填充
</solid>
<size> 定义大小
</size>
</shape>
复制代码
13.菜单资源
菜单不仅可以在onCreateContextMenu或onCreateOptionsMenu方法中通过代码创建,还可以在res/menu目录中建立相应的菜单资源文件,并在上面两个方法中加载菜单资源;
菜单资源文件必须以<menu>标签作为根节点,每一个菜单项用一个<item>表示,如果要定义子菜单,可以在<item>标签中包含<menu>标签;如果想将多个菜单项划为一组,可以使用<group>包含多个<item>标签;
复制代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
复制代码
查看MenuInflater.inflate(int,Menu)
复制代码
/**
* Inflate a menu hierarchy from the specified XML resource.
*
* @param menuRes Resource ID for an XML layout resource to load (e.g., <code>R.menu.main_activity</code>)
* @param menu The Menu to inflate into. The items and submenus will be added to this Menu.
*/
public void inflate(int menuRes, Menu menu) {
XmlResourceParser parser = null;
try {
parser = mContext.getResources().getLayout(menuRes);
AttributeSet attrs = Xml.asAttributeSet(parser);
parseMenu(parser, attrs, menu);
} catch ...finally {
if (parser != null) parser.close();
}
}
复制代码
14.样式与主题(style/theme)
>>1.样式style
android中样式和css中样式作用是一样的,都是用于为界面元素定义显示风格,它是一个包含一个或者多个控件属性的集合。
定义样式需要在res/values/styles.xml中进行定义,如下是一个样式的定义:
<style name="textViewStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">#FF0000</item>
</style>
<style name="textViewStyle1" parent="textViewStyle"></style><!-- 此样式继承自textViewStyle -->
<style name="textViewStyle.Livingstone"><!-- 样式继承的另一种写法,但不可用此写法继承Android自带的定义样式? -->
<item name="android:textColor">#00FF00</item>
</style>
所有定义的样式都会在R文件中自动生成一个资源ID,加一个点表示样式继承会生成上图所示的资源id;
样式的引用:
<TextView
style="@style/textViewStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello" />
>>2.主题Theme
主题应用于整个应用或者activity,样式应用于具体的控件上。主题的应用与样式定义一样,不同的是主题还可以设置窗口的显示风格;主题的引用需要在清单文件中进行引用,如引用到整个应用之上就需要在Application节点中进行配置引用,而引用到单个Activity只需要在此Activity中进行配置引用;
复制代码
<style name="Livingstonetheme"><!--此定义是一个无Title的主题-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
<!-- 问号表示引用此主题中android:windowNoTitle属性的值 -->
<item name="android:textSize">18sp</item>
</style>
复制代码
android系统定义了一些属性,如android:theme="@android:style/Theme.Dialog",该主题可以让Activity看起来像一个对话框,更多主题可以在文档reference->android->R.style中查看。当主题里面的样式属性值与样式里面的属性值发生冲突的时候会显示样式里面的值;
15.其它资源
在资源文件中还可以包括尺寸(dimen)、整数(integer)、布尔(bool) 、整形数组资源(integer-array)、资源数组(array)、颜色(color)
TypedArray ta = getResources().obtainTypedArray(int id); // 获取数组资源,包括integer-array、array
Final总结:
除了res/values目录中的资源名,其它目录的资源都会以文件名在R类的相应子类中生成变量;而res/values中的资源会以name属性值为变量名在R类的相应子类中生成变量;