我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个HealthFood 源码
百度搜就知道很多下载的地方
布局的知识需要不断的积累并实用,所以我采取了这样的方式,而不是先去看文档介绍中的所有关于属性的知识点,觉得那样挺累,也也记不住
这里的学习接前面的布局处理(一),地址:http://blog.csdn.net/u014737138/article/details/40477309
这里学习的是一个关于软件版本的一个简单的布局:
主要学习:ScrollView布局 TextView 控件 以及在布局之间的嵌套 (ScrollView布局里面含有LinearLayout布局)
首先看效果图:
源码:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:gravity="center"
android:text="@string/abouttitle"
android:textColor="@color/black"
android:textSize="15dip" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="20px"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:maxLines="21"
android:text="@string/text1"
android:textColor="@color/black"
android:textSize="12dip"
android:width="10px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:gravity="center"
android:maxLines="21"
android:text="@string/title2"
android:textColor="@color/black"
android:textSize="15dip" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="20px"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:maxLines="21"
android:text="@string/text2"
android:textColor="@color/black"
android:textSize="12dip"
android:width="10px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:gravity="center"
android:maxLines="21"
android:text="@string/title3"
android:textColor="@color/black"
android:textSize="15dip" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="20px"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:maxLines="21"
android:text="@string/text3"
android:textColor="@color/black"
android:textSize="12dip"
android:width="10px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:gravity="center"
android:maxLines="21"
android:text="@string/title4"
android:textColor="@color/black"
android:textSize="15dip" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="20px"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:maxLines="21"
android:text="@string/text4"
android:textColor="@color/black"
android:textSize="12dip"
android:width="10px" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:drawableBottom="@drawable/divider"
android:gravity="bottom"
android:paddingLeft="100px"
android:text="@string/email"
android:textColor="@color/black"
android:textSize="12dip" />
</LinearLayout>
</ScrollView>
还未学习的知识点有:
1.布局的嵌套:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white" >
<LinearLayout
>
</LinearLayout>
</ScrollView>
按照上面的格式和显示的结果来看,我们很清楚明白这个原理了,不用解释了
2.关于属性的知识点:
1)android:background="@color/white" > 这里设置背景采用的是一个白色的颜色,它取值是从资源文件color里面获取的一个name为white的值
color.xml的定义和string.xml的定义一样,new一个Android xml file,命名为color
然后定义一个name="white"的color就可以。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
</resources>
2)android:drawableBottom
//在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者
这里设置的图片就是一条横线。
3) android:text="@string/abouttitle" 设置文本,它的值时资源文件string中name=abouttitle的值
android:textColor="@color/black" 设置文本的颜色
android:textSize="15dip" /> 设置文本的大小 推荐度量单位”sp”,如”15sp”
拓展:
1.Android 常用RGB值以及中英文名称
| |||||||
| |||||||
| #FFB6C1 | LightPink | 浅粉红 | ||||
| #FFC0CB | Pink | 粉红 | ||||
| #DC143C | Crimson | 深红/猩红 | ||||
| #FFF0F5 | LavenderBlush | 淡紫红 | ||||
| #DB7093 | PaleVioletRed | 弱紫罗兰红 | ||||
| #FF69B4 | HotPink | 热情的粉红 | ||||
| #FF1493 | DeepPink | 深粉红 | ||||
| #C71585 | MediumVioletRed | 中紫罗兰红 | ||||
| #DA70D6 | Orchid | 暗紫色/兰花紫 | ||||
| #D8BFD8 | Thistle | 蓟色 | ||||
| #DDA0DD | Plum | 洋李色/李子紫 | ||||
| #EE82EE | Violet | 紫罗兰 | ||||
| #FF00FF | Magenta | 洋红/玫瑰红 | ||||
| #FF00FF | Fuchsia | 紫红/灯笼海棠 | ||||
| #8B008B | DarkMagenta | 深洋红 | ||||
| #800080 | Purple | 紫色 | ||||
| #BA55D3 | MediumOrchid | 中兰花紫 | ||||
| #9400D3 | DarkViolet | 暗紫罗兰 | ||||
| #9932CC | DarkOrchid | 暗兰花紫 | ||||
| #4B0082 | Indigo | 靛青/紫兰色 | ||||
| #8A2BE2 | BlueViolet | 蓝紫罗兰 | ||||
| #9370DB | MediumPurple | 中紫色 | ||||
| #7B68EE | MediumSlateBlue | 中暗蓝色/中板岩蓝 | ||||
| #6A5ACD | SlateBlue | 石蓝色/板岩蓝 | ||||
| #483D8B | DarkSlateBlue | 暗灰蓝色/暗板岩蓝 | ||||
| #E6E6FA | Lavender | 淡紫色/熏衣草淡紫 | ||||
| #F8F8FF | GhostWhite | 幽灵白 | ||||
| #0000FF | Blue | 纯蓝 | ||||
| #0000CD | MediumBlue | 中蓝色 | ||||
| #191970 | MidnightBlue | 午夜蓝 | ||||
| #00008B | DarkBlue | 暗蓝色 | ||||
| #000080 | Navy | 海军蓝 | ||||
| #4169E1 | RoyalBlue | 皇家蓝/宝蓝 | ||||
| #6495ED | CornflowerBlue | 矢车菊蓝 | ||||
| #B0C4DE | LightSteelBlue | 亮钢蓝 | ||||
| #778899 | LightSlateGray | 亮蓝灰/亮石板灰 | ||||
| #708090 | SlateGray | 灰石色/石板灰 | ||||
| #1E90FF | DodgerBlue | 闪兰色/道奇蓝 | ||||
| #F0F8FF | AliceBlue | 爱丽丝蓝 | ||||
| #4682B4 | SteelBlue | 钢蓝/铁青 | ||||
| #87CEFA | LightSkyBlue | 亮天蓝色 | ||||
| #87CEEB | SkyBlue | 天蓝色 | ||||
| #00BFFF | DeepSkyBlue | 深天蓝 | ||||
| #ADD8E6 | LightBlue | 亮蓝 | ||||
| #B0E0E6 | PowderBlue | 粉蓝色/火药青 | ||||
| #5F9EA0 | CadetBlue | 军兰色/军服蓝 | ||||
| #F0FFFF | Azure | 蔚蓝色 | ||||
| #E0FFFF | LightCyan | 淡青色 | ||||
| #AFEEEE | PaleTurquoise | 弱绿宝石 | ||||
| #00FFFF | Cyan | 青色 | ||||
| #00FFFF | Aqua | 浅绿色/水色 | ||||
| #00CED1 | DarkTurquoise | 暗绿宝石 | ||||
| #2F4F4F | DarkSlateGray | 暗瓦灰色/暗石板灰 | ||||
| #008B8B | DarkCyan | 暗青色 | ||||
| #008080 | Teal | 水鸭色 | ||||
| #48D1CC | MediumTurquoise | 中绿宝石 | ||||
| #20B2AA | LightSeaGreen | 浅海洋绿 | ||||
| #40E0D0 | Turquoise | 绿宝石 | ||||
| #7FFFD4 | Aquamarine | 宝石碧绿 | ||||
| #66CDAA | MediumAquamarine | 中宝石碧绿 | ||||
| #00FA9A | MediumSpringGreen | 中春绿色 | ||||
| #F5FFFA | MintCream | 薄荷奶油 | ||||
| #00FF7F | SpringGreen | 春绿色 | ||||
| #3CB371 | MediumSeaGreen | 中海洋绿 | ||||
| #2E8B57 | SeaGreen | 海洋绿 | ||||
| #F0FFF0 | Honeydew | 蜜色/蜜瓜色 | ||||
| #90EE90 | LightGreen | 淡绿色 | ||||
| #98FB98 | PaleGreen | 弱绿色 | ||||
| #8FBC8F | DarkSeaGreen | 暗海洋绿 | ||||
| #32CD32 | LimeGreen | 闪光深绿 | ||||
| #00FF00 | Lime | 闪光绿 | ||||
| #228B22 | ForestGreen | 森林绿 | ||||
| #008000 | Green | 纯绿 | ||||
| #006400 | DarkGreen | 暗绿色 | ||||
| #7FFF00 | Chartreuse | 黄绿色/查特酒绿 | ||||
| #7CFC00 | LawnGreen | 草绿色/草坪绿 | ||||
| #ADFF2F | GreenYellow | 绿黄色 | ||||
| #556B2F | DarkOliveGreen | 暗橄榄绿 | ||||
| #9ACD32 | YellowGreen | 黄绿色 | ||||
| #6B8E23 | OliveDrab | 橄榄褐色 | ||||
| #F5F5DC | Beige | 米色/灰棕色 | ||||
| #FAFAD2 | LightGoldenrodYellow | 亮菊黄 | ||||
| #FFFFF0 | Ivory | 象牙色 | ||||
| #FFFFE0 | LightYellow | 浅黄色 | ||||
| #FFFF00 | Yellow | 纯黄 | ||||
| #808000 | Olive | 橄榄 | ||||
| #BDB76B | DarkKhaki | 暗黄褐色/深卡叽布 | ||||
| #FFFACD | LemonChiffon | 柠檬绸 | ||||
| #EEE8AA | PaleGoldenrod | 灰菊黄/苍麒麟色 | ||||
| #F0E68C | Khaki | 黄褐色/卡叽布 | ||||
| #FFD700 | Gold | 金色 | ||||
| #FFF8DC | Cornsilk | 玉米丝色 | ||||
| #DAA520 | Goldenrod | 金菊黄 | ||||
| #B8860B | DarkGoldenrod | 暗金菊黄 | ||||
| #FFFAF0 | FloralWhite | 花的白色 | ||||
| #FDF5E6 | OldLace | 老花色/旧蕾丝 | ||||
| #F5DEB3 | Wheat | 浅黄色/小麦色 | ||||
| #FFE4B5 | Moccasin | 鹿皮色/鹿皮靴 | ||||
| #FFA500 | Orange | 橙色 | ||||
| #FFEFD5 | PapayaWhip | 番木色/番木瓜 | ||||
| #FFEBCD | BlanchedAlmond | 白杏色 | ||||
| #FFDEAD | NavajoWhite | 纳瓦白/土著白 | ||||
| #FAEBD7 | AntiqueWhite | 古董白 | ||||
| #D2B48C | Tan | 茶色 | ||||
| #DEB887 | BurlyWood | 硬木色 | ||||
| #FFE4C4 | Bisque | 陶坯黄 | ||||
| #FF8C00 | DarkOrange | 深橙色 | ||||
| #FAF0E6 | Linen | 亚麻布 | ||||
| #CD853F | Peru | 秘鲁色 | ||||
| #FFDAB9 | PeachPuff | 桃肉色 | ||||
| #F4A460 | SandyBrown | 沙棕色 | ||||
| #D2691E | Chocolate | 巧克力色 | ||||
| #8B4513 | SaddleBrown | 重褐色/马鞍棕色 | ||||
| #FFF5EE | Seashell | 海贝壳 | ||||
| #A0522D | Sienna | 黄土赭色 | ||||
| #FFA07A | LightSalmon | 浅鲑鱼肉色 | ||||
| #FF7F50 | Coral | 珊瑚 | ||||
| #FF4500 | OrangeRed | 橙红色 | ||||
| #E9967A | DarkSalmon | 深鲜肉/鲑鱼色 | ||||
| #FF6347 | Tomato | 番茄红 | ||||
| #FFE4E1 | MistyRose | 浅玫瑰色/薄雾玫瑰 | ||||
| #FA8072 | Salmon | 鲜肉/鲑鱼色 | ||||
| #FFFAFA | Snow | 雪白色 | ||||
| #F08080 | LightCoral | 淡珊瑚色 | ||||
| #BC8F8F | RosyBrown | 玫瑰棕色 | ||||
| #CD5C5C | IndianRed | 印度红 | ||||
| #FF0000 | Red | 纯红 | ||||
| #A52A2A | Brown | 棕色 | ||||
| #B22222 | FireBrick | 火砖色/耐火砖 | ||||
| #8B0000 | DarkRed | 深红色 | ||||
| #800000 | Maroon | 栗色 | ||||
| #FFFFFF | White | 纯白 | ||||
| #F5F5F5 | WhiteSmoke | 白烟 | ||||
| #DCDCDC | Gainsboro | 淡灰色 | ||||
| #D3D3D3 | LightGrey | 浅灰色 | ||||
| #C0C0C0 | Silver | 银灰色 | ||||
| #A9A9A9 | DarkGray | 深灰色 | ||||
| #808080 | Gray | 灰色 | ||||
| #696969 | DimGray | 暗淡灰 | ||||
| #000000 | Black | 纯黑 |
2)Android中dip、dp、sp、pt和px的区别
1、概述
过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。Android应用开发支持不同的度量单位。
android虚拟机里的像素名称对应的实际值
WVGA800 480×800像素
WVGA854 480×854像素
WXGA800 800×1280像素
WXGA720 720×1280像素
HVGA 360×480像素
QVGA 240×320像素
WQVGA400 240×400像素
WQVGA432 240×432像素
WSVGA 600×1024像素
2、度量单位含义
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,
一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp: dip是一样的
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
in(英寸):长度单位。
mm(毫米):长度单位。
3、度量单位的换算公式
在android源码包TypedValue.java中,我们看如下函数
public static float applyDimension(int unit, float value,DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
该函数功能:是把各单位换算为像素。
metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.xdpi:默认值为DENSITY_DEVICE;
DENSITY_DEVICE:为屏幕密度
DENSITY_DEFAULT:默认值为160
4、屏幕密度:表示每英寸有多少个显示点,与分辨率是两个不同的概念。
5、综上所述
据px = dip * density / 160,则当屏幕密度为160时,px = dip
根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。