第二章学习笔记(1.19-1.22)
像素
Android支持的像素单位主要有px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小),常用的是px、dp、sp三种。dp与物理设备无关吗,只与屏幕的尺寸有关。sp的原理跟dp差不多,专门用于设置字体大小。设置普通字体时,同数值dp和sp的文字看起来一样大,如果设置为大字体,用dp设置的文字没有变化,用sp设置的文字就变大了。所以说,dp与系统设置的字体大小没有关系,而sp会随系统设置的字体大小变大或变小。
XML布局文件中,为了让不同设备屏幕拥有统一的显示效果,除了sp用于设置文字的大小外,其余要用大小的地方都用dp。
Android用于设置大小的函数都以px为单位,无论是setMargins还是setPadding,参数单位都是px,想要在代码中使用dp设置布局大小或间距,就要先把dp值转换成px值。
颜色
Android中,颜色值由透明度alpha和RGB(红绿蓝)三原色定义
八位十六进制数编码
例如八位编码FFEEDDCC,FF表示透明度(FF表示完全不透明,00表示完全透明),EE表示红色的浓度,DD表示绿色的浓度,CC表示蓝色的浓度,RGB三色的数值越大颜色越浓也就越亮,数值越小颜色越暗,亮到极致就是白色,暗到极致就是黑色。
六位十六进制编码分为两种情况,在代码中默认透明(透明度为00),在XML文件中默认不透明(透明度为FF),所以说,在代码中一般不要用六位编码,因为六位编码在代码中默认是透明的。
1.使用系统已定义的颜色变量
BLACK GRAY DKGRAY LTGRAY WHITE RED GREEN BLUE YELLOW TRANSPARENT CYAN(青色) MAGENTA(玫红)
2.使用十六进制的颜色编码
XML文件中android:textColor="#000000"
代码文件中setTextColor(0xff00ff00),也可以通过Color.rgb(int red, int green, int blue)和Color.argb(int alpha, int red, int green, int blue)这两种方法指定颜色
用法举例setTextColor(Color.rgb(100, 100, 100));
3.使用colors.xml中定义的颜色
XML文件中@color/常量名
代码文件中getResources().getColor(R.color.常量名)
屏幕分辨率
在代码中获取分辨率就是获得DisplayMetrics对象,然后从该对象中获得宽度、高度、像素密度等信息,DisplayMetrics类的常用属性说明:
widthPixels:以px为单位计量的宽度值
heightPixels:以px为单位计量的高度值
density:像素密度,即一个dp单位包含多少个px单位
简单布局
LinearLayout的orientation属性的默认是horizontal
以宽度为例,wrap_content表示与内部内容一样宽(内部内容如果超过上级视图的宽度,则该视图保持与上级视图一样宽,超出宽度的内容得进行滚动才能显示出来)
minWidth:指定该视图的最小宽度(还有minHeight)
visibility:指定该视图的可视类型,取值如下:
visible 可见,默认值
invisible 不可见,虽然看不到但是还占着位置
gone 消失,不仅看不到而且不占位置了
一些方法:
setMinimumWidth
setBackgroundColor
setBackgroundDrawable
setBackgroundResource
margin和padding的概念区别:
margin是指当前视图与周围视图的距离,padding是指当前视图与内部内容之间的距离。
layout_gravity和gravity的区别:
layout_gravity指定该视图与上级视图的对齐方式,而gravity指定布局内部视图与本布局的对齐方式。
垂直滚动视图ScrollView,水平滚动视图HorizontalScrollView
(1)垂直方向滚动时,layout_width要设置为match_parent,layout_height要设置为wrap_content
(2)水平方向滚动时,layout_width要设置为wrap_content,layout_height要设置为match_parent
(3)滚动视图节点下面必须只能挂着一个子布局节点,否则会在运行时报错(ScrollView can only have one direct child.)
ScrollView的实际内容不够,又想让它充满屏幕,怎么办呢?
android:layout_height="match_parent"
android:fillViewport="true"
简单控件
ImageView拉伸类型的取值说明
fitXY 拉伸图片使其正好填满视图(图片可能被拉伸变形)
fitStart 拉伸图片使其位于视图上部
fitCenter 拉伸图片使其位于视图中间
fitEnd 拉伸图片使其位于视图下部
center 保持图片原尺寸,并使其位于视图中间
centerCrop 从图片中心开始,均衡地缩放图像(保持宽高比例不变),使得图片充满视图,并位于视图中间
centerInside 使图片位于视图中间(只压不拉)。当图片尺寸大于视图时,centerInside等同于fitCenter;当图片尺寸小于视图时,centerInside等同于center
ScaleType类中的拉伸类型全部是大写的,scaleType默认是fitCenter
src:指定图形来源,src图形按照scaleType拉伸,注意背景图不按scaleType指定的方式拉伸,背景默认以fitXY拉伸
ImageView在代码中调用的方法说明:
setScaleType
setImageDrawable
setImageResource
setImageBitmap
截图功能相关方法:(CaptureActivity)
setDrawingCacheEnabled:设置绘图缓存的可用状态,true表示打开,false表示关闭
isDrawingCacheEnabled:判断该空间的绘图缓存是否可用
setDrawingCacheQuality:设置绘图缓存的质量
getDrawingCache:获取该空间的绘图缓存结果,返回值为Bitmap类型
setDrawingCacheBackgroundColor: 设置绘图缓存的背景颜色,绘图缓存默认背景为黑色,如果不提前设置缓存的背景色,截图的结果就是黑乎乎一片,所以需要将背景色设置为默认颜色(通常是白色)
截图功能的具体步骤如下:
1.开始截图前,先调用setDrawingCacheEnabled方法,设置绘图缓存为可用状态。注意该方法在一开始就得调用,因为先开启绘图缓存,之后变更的界面才会记录到缓存中;如果先变更界面再开启绘图缓存,缓存里就是空的
2.调用getDrawingCache方法获取缓存中的图像数据
3.完成截图,延迟若干毫秒后调用setDrawingCacheEnabled方法关闭绘图缓存,如果接下来还要截图,就再次调用setDrawingCacheEnabled方法重新开启绘图缓存。(这里要启一个新线程)
关于长按
只要记得把最后的return改成true就好了
ImageButton
Button既可显示文本也可显示图形(通过设置背景图),而ImageButton只能显示图形不能显示文本
ImageButton上的图像可按比例,而Button上的大图会拉伸变形(因为背景图无法按比例拉伸)
Button只能在背景显示一张图形,而ImageButton可分别在前景和背景显示两张图形,实现图片叠加的效果
文字周围放置图片用到的属性和方法(IconActivity)
drawableTop 指定文本上方的图形
drawableBottom
drawableLeft
drawableRight
drawablePadding 指定图形与文本的间距
setCompoundDrawables 设置文本周围的图形,依次为左、上、右、下
样例btn.setCompoundDrawables(null,drawable,null,null)
setCompoundDrawablePadding 设置图形与文本的间距
在界面上增加一个水平分割线:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000" />
九宫格图片:略