px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小);
px:手机屏幕上可显示的最小单位;
dp:按照屏幕尺寸计量,与物理设备无关;
sp:原理跟dp差不多,专用于设置字体大小;
安卓中的颜色由透明度alpha和RGB(红、绿、蓝)组成,有8位16进制或6位16进制组成;
例如(8位):FFEEDDCC,FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度,CC表示蓝色的浓度;
6位16进制颜色值是去掉透明度值的8位16进制的颜色值;
6位16进制透明度的两种情况:在xml中默认为不透明(透明度为FF),在代码中默认为全透明(透明度为00);
数值越小颜色浓度越小越暗,数值越大颜色浓度越大越亮,亮到极致是白色,暗到极致是黑色;
①使用系统已经定义好的颜色常量;
Color.BLACK 黑色
Color.BLUE 蓝色
Color.CYAN 青绿色
Color.DKGRAY 灰黑色
Color.GRAY 灰色
Color.GREEN 绿色
Color.LTGRAY 浅灰色
Color.MAGENTA 红紫色
Color.RED 红色
Color.TRANSPARENT 透明
Color.WHITE 白色
Color.YELLOW 黄色
示例:
tv1.setTextColor(Color.GREEN);
②使用16进制颜色编码;
xml中示例:
//6位16进制
android:textColor="#FF0000"
//8位16进制
android:textColor="#FFFF0000"
代码中示例:
//方法一,直接输入16进制颜色值
tv1.setTextColor(0X666666);
//方法二,6位16进制,不用,因为默认透明,用了等于不用
tv1.setTextColor(Color.rgb(0XFF,0X55,0X44));
//方法三,8位16进制,透明度、红绿蓝颜色浓度值
tv1.setTextColor(Color.argb(0XFF,0XFF,0X55,0X44));
③使用colors.xml中定义的颜色;
xml中示例:
android:textColor="@color/colorPrimary"
代码中示例:
tv1.setTextColor(getResources().getColor(R.color.colorAccent));
widthPixels:以px为单位计量的宽度值;
heightPixels:以px为单位计量的高度值;
density:像素密度,即一个dp单位包含多少个px单位;
//获取当前屏幕宽度:
private int getScreenWidth(Context mContext) {
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
assert wm != null;
wm.getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
//获取当前屏幕高度:
private int getScreenHeight(Context mContext) {
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
assert wm != null;
wm.getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
//获取当前屏幕像素密度
private float getScreenDensity(Context mContext) {
WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
assert wm != null;
wm.getDefaultDisplay().getMetrics(dm);
return dm.density;
}
View是Android的基本视图,所有的空间和布局都是由View类直接或间接派生出来的,故所有View类的基本属性和方法是各控件和布局通用的;
id:指定当前视图的id;
layout_width:指定当前视图的宽度,属性值可以是具体的dp数值,可以是match_parent(与上级视图一样宽),也可以是wrap_width(包裹当前视图的内容,若当前视图的内容超过了上级视图的宽度,则为上级视图的宽度,多出的内容滚动显示);
layout_height:指定当前视图的高度,属性值说明同宽度;
layout_margin:指定当前视图与周围视图之间的空白距离(包括上、下、左、右),另有layout_marginTop、layout_marginBottom、layout_marginLeft、layout_marginRight分别表示上下左右;
minWidth:指定该视图的最小宽度;
minHeight:指定该视图的最小高度;
background:指定该视图的背景,背景可以是颜色或图片;
layout_gravity:指定该视图与上级视图的对其方式,取值left、right、top、bottom、center_horizontal、center_vertical;
padding:指定该视图与内部内容的空白距离,另有paddingTop、paddingBottom、paddingLeft、paddingRight分别表示上下左右;
visibility:指定该视图的可是类型,visible:可见,默认;invisible,不可见,占位置;gone,不可见,不占位置;
setLayoutParams:设置该视图的布局参数;
参数对象的构造函数可以设置视图的宽度和高度,其中LayoutParams.MATCH_PARENT表示与上级视图一样宽,LayoutParams.WRAP_CONTENT表示与内部内容一样宽,参数对象的setMargins方法可以设置该视图与周围视图之间的空白距离;
setMinWidth():设置该视图的最小宽度;
setMinHeight():设置该视图的最小高度;
setBackground():设置该视图的背景图片;
setBackgroundColor():设置该视图的背景颜色;
setBackgroundResource():设置该视图的背景资源ID;
setPadding():设置该视图的内边距;
setVisibility():设置该视图的可见类型;
布局:布局本质上是各容器,内部还可以再放子布局或者子控件;
控件:控件是一个单一的实体,已经是最后一次,其内不能再包含其他子控件或者子视图;
所有布局视图类都是从ViewGroup派生而来的;
ViewGroup的三个方法(也是所有布局类视图共有的方法):
addView:往布局中添加一个视图;
removeView:从布局中删除指定视图;
removeAllViews:删除该布局下的所有视图;
LinearLayout是最常用的布局;
LinearLayout除了继承了来自View/ViewGroup类的所有属性和方法外,其特有的属性和方法如下:
orientation:指定线性布局的方向,horizontal(默认)表示水平布局,vertical表示垂直布局;
gravity:指定布局内部视图与本线性布局的对齐方式;
layout_weight:指定当前视图在宽或高占上级线性布局的权重;
setOrientation:设置线性布局的方向,LinearLayout.HORIZONTAL表示水平布局,LinearLayout.VERTICAL表示水平布局;
setGravity:设置布局内部视图与本线性布局的对齐方式;
ScrollView,layout_width要设置为wrap_content;
HorizontalScrollView,layout_height要设置为wrap_content;
①滚动视图下必须有且仅有一个子布局节点,否则会报错;
②有时ScrollView实际内容不够,我们又想让他充满屏幕,将layout_height设置为match_parent是无效的,可以添加:
android:fillViewport="true"