
正文
android系统设计,Android系统设计需求分析
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
北大青鸟设计培训:怎么学好android系统开发?
怎么学好android系统开发?android系统开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是没有任何意义的。
那么Java学到什么程度才算是过关呢?南昌北大青鸟认为至少要掌握以下两个方面的内容:1、Java基础语法设计模式:由于在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。
设计模式的种类非常之多,一个一个的全部掌握,是不现实的,必须首先掌握面向对象的基础设计原则,有了这些基础原则的支持,就可以举一反三。
这部分内容可以在《EffectiveJava》和《Agile.Software.Development:Principles,Patterns.and.Practices》这两本书中找到。
2、Linux基础知识:Android系统的基础是Linux操作系统。
在开发过程当中,我们也需要使用到一些Linux命令。
所以说一些Linux的基础知识是必须的(话说现在的程序员,不懂Linux都不好意思跟人家打招呼),推荐大家看看《鸟哥的私房菜》这本书,写的相当不错;3、数据库基础知识这个比较简单,就是一个增删改查的数据库操作,可以看一下这本书:《SQL编程练习与解答》4、网络协议至少需要学习两种基础的协议,HTTP协议与Socket协议;5、Android基础知识有了以上的铺垫,再来看Android,是不是觉得轻松了很多呢?至于基础知识的学习顺序,最好的方法就是按照AndroidSDK帮助文档当中的DevGuide里面的顺序。
相关问答
Q1: Android 12新系统发布,UI设计更圆润,多家国产品牌会率先升级
“一入安卓深似海,但又不得不用”,除了苹果手机的iOS系统之外,市场上就剩下谷歌的Android操作系统了。从当年的卡顿不好用,到现在的流畅好看,安卓系统迎来了发展新生。但随着用户需求的不断提高,安卓系统的迭代创新能力似乎有些不足,用户体验也没有太大差别。但是,这次全新升级的Android 12,可以说更符合时代当下发展的潮流了。
根据谷歌方面的介绍, Android 12 启用了全新的Material You设计语言,整套设计UI的自定义程度也变得比过去更高了,系统色调会根据壁纸而发生变化,更具人性化 。关于动画效果方面,新系统也进行了调整,更加高效了。这次在隐私方面有较大升级,增加了一个一个新的隐私仪表板和Android 隐私运算的核心概念,是从底层保护用户的隐私问题。
作为用户最关心的还是自己的手机能否升级此系统,谷歌方面也是第一时间公布了首批升级 Android 12 Beta 1的品牌。 包括华硕、谷歌Pixel、一加手机、OPPO、realme、夏普、传音、TCL、VIVO、小米以及中兴等品牌 。其中,部分国产品牌在第一时间发布了通告,手持旗下高端旗舰手机的用户,可以在第一时间内体验到新一代的安卓操作系统。
OPPO自从挖了部分魅族员工之后,它在系统方面就有了突飞猛进的进步,经过了用户的吐槽,现在Color OS已经成长为国内一流定制化UI。 根据官方的进程,第一款能率先升级 Android 12 Beta 1系统的机型是OPPO Find X3 Pro,也就是看家旗舰,已经开启升级 。这才是旗舰机该有的待遇,不过还是要谨慎升级,因为无法保证是否有Bug。
另一个可以升级开发者预览版 Android 12系统的机型是realme品牌的热门旗舰,它就是realme GT, 目前已经可以在官方社区进行升级。如果追求稳定的话,还是建议等等,开发者预览版不够稳定 。一加也宣布了自己的升级计划,一加9和一加9 Pro也能第一时间享受到新系统带来的新鲜感。还有中兴Axon 30 Ultra,让人比较意外的是它也在首批升级名单中,可以看出中兴很用心了。
剩下的品牌也会升级,大家也不必要着急,等稳定成熟之后也不迟。 至于华为,它是无法升级 Android 12了,现在它的重心已经转移到自己的鸿蒙操作系统。和安卓一样,鸿蒙OS也是具备开源性。 或许不久的将来,安卓不再是国产手机厂商的依赖,若是鸿蒙OS也能早日发展壮大,其它品牌使用华为的系统也不是不可能。但这还是根据公司的发展规划来。
安卓系统虽然和iOS系统存在一定的差距,但是在创新方面它并不差,而且很多方面比苹果还要优秀。只不过,现阶段国产品牌对它依赖性比较大,希望能有自己的国产系统发展起来,打造自己的生态链。
Q2: Android 平台设计规范有哪些
众所周知,安卓系统是开源的,国内又有超多的手机厂商,小米、魅族、华为、oppo、三星等,每一个品牌有属于自己的UI设计规范,但是我们主要分析UI界面尺寸规范。
1、字体
安卓系统中文采用的是思源黑体,英文字体为robot字体。
只使用偶数单位 24 pt,28 pt,36 pt等字体大小
2、mdpi、hdpi、 xhdpi、xxhdpi、xxxhdpi、dp、px到底是什么意思?
讲图标之前先来分析一下一排英文的意思:
mdpi、hdpi、 xhdpi、xxhdpi、xxxhdpi都是表示的屏幕密度大小,依次数值越大,其分辨率越高。常用的是xxhdpi和xxxhdpi。
dp是安卓系统专用的长度单位,设备独立像素的意思。不同设备有不同的显示效果,这个和设备硬件有关。多为图标使用,文字则用sp(放大像素),主要用于字体显示best for textsize。
px是像素的意思, 不同设备显示效果相同。
安卓各屏幕密度关系如下:
3、图标
不同手机品牌的图标的标志是不一样的,对应不同大小屏幕的尺寸如下:
系统图标的尺寸:
快捷图标的尺寸:
应用图标的尺寸:
4、应用栏的尺寸
从左到右依次是:① 应用栏高度:56dp;应用栏左右内边距为16dp;应用栏图标上下左内边距为16dp;应用栏标题左内边距为72dp;应用栏标题下边距:20dp;
②应用栏高度为128dp;
③操作栏高度为56dp;标题栏高度:80dp;标题栏底部内边距:8dp;描述区域高度:72dp;描述区底部内边距:16dp。
5、列表高度
垂直边框、水平外边距、边框左右外边距各16dp;带有图标或者头像的内容有72dp的左边距。
垂直边距
①状态栏:24dp;②工具栏:56dp;③子标题:48dp;④列表项:72dp
垂直边框、水平外边距、边框左右外边距各16dp;带有图标或者头像的内容有72dp的左边距。
垂直边距
①状态栏:24dp;②工具栏:56dp;③标题和列表项:48dp;④子标题:48dp;⑤内容区域间距离为8dp
6、切图
上周我们讲到iPhone 6与iPhone 6 Plus约是1.5的关系,而xhdpi的Android手机屏幕与xxdpi的屏幕刚好是1.5倍的关系,所以iPhone 6 Plus和xxhdip也可以共用一套切图,掌握好尺寸关系,能让工作变得简单很多。
7、界面适配
安卓多屏幕支持的基础是它能够管理应用程序的布局和位图可绘制对象的渲染以适当的方式对当前屏幕配置的能力。该系统处理的大部分工作由布局缩放以适合屏幕尺寸/密度和缩放位图可绘制在屏幕密度正确呈现您的应用程序在每个屏幕的配置,来优化用户界面设计,带来更良好的用户体验。
如何做到安卓界面适配呢?大家一定要很清楚的了解分辨率、屏幕大小、密度的关系;明白实际密度和系统密度的关系,dp、sp、px的区别;明白dp与px的转换。这里不做过多阐述,后期写一篇具体的~
安卓的界面规范就讲到这里,要明白设计界面规范的意义是确保设计的统一性与合理性,规范维护的是项目的统一,为了项目利益最大化,高效化。所以作为UI设计师的我们,如果一点设计规范不遵守,全靠自己想当然,那就别发给前端人员啦,他也看不懂。
Q3: 怎样设计android系统的用户界面?请简述界面布局方式
1 学习原生软件的界面开发,而且最好还是看一些开源的,无论从设计的角度还是从开发的角度都是极好的。
比如优秀的作品很多,这些不开源学习界面就好,开源的可以看看系统的应用。和系统本身结合的非常好,设计风格和系统也很统一,给用户较好的体验。
2 确定整体产品色彩基调,色彩基调可以从产品功能中提取,也可以从产品LOGO中提取;
3 做出界面原型,包括功能布局、页面交互等元素;
4 在界面原型基础上进行色彩添加,进一步的细节调整;
5 有了好的外形基础后,再就是回归到用户体验。记住用户才是第一位的。交互设计通常靠外形吸引用户,但真正留住用户的是细节上的人性化。让这些极简的设计细节控制用户的生活习惯,最终让用户离不开它们!根据用户使用体验反馈再次修改界面,不断完善。
Q4: android系统中有哪三种常用的ui设计方式
Android 资源类型
1.字符串资源
1.普通字符串
2.字符串数组
复制代码
resources
string-array name="planets_array"
itemaaa/item
itembbb/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 bandroid/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=""
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=""
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=""
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=""
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=""
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=""
android:drawable="@drawable/hell"
android:insetLeft="10dip" !--图像距离左边的距离,延伸--上/下/右的距离--
/inset
10.剪切(Clip)图像资源,使用剪切图像资源可以只显示图像的一部分,如可以通过此来制作进度条;
clip xmlns: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=""
android:drawable="@drawable/hell"
android:scaleGravity="center" // 设置图像显示的位置
android:scaleHeight="70%" // 设置图像显示的高度
android:scaleWidth="80%" // 设置图像显示的宽度
/scale
12.形状资源
复制代码
shape xmlns: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., codeR.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类的相应子类中生成变量;







