1、Android界面元素的5个主要组成部分
(1)视图
(2)视图容器
(3)布局管理
(4)activity
(5)fragment
2、Android常用的布局
(1)LinearLayout:线性布局
(2)RelativeLayout:相对布局
(3)TableLayout:表格布局
(4)AbsoluteLayout:绝对布局
3、Android中的两种创建布局的方式
(1)在XML布局文件中声明
(2)在程序中直接实例化布局及其组件
//创建布局管理器 FrameLayout frameLayout = new FrameLayout(this); //设置布局管理器背景颜色 frameLayout.setBackgroundColor(getResources().getColor(R.color.colorAccent)); //设置activity显示布局管理 setContentView(frameLayout); //创建TextView文本展示对象 TextView textView = new TextView(this); //设置展示内容 textView.setText("在代码中控制UI界面"); //设置字体大小 textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,24); //将textView添加到布局管理器中 frameLayout.add(textView);
4、线性布局
(1)android:id布局组件的唯一标识
android:id="@+id/ll_my_layout"
(2)android:orientation设置线性布局内部组件的排列形式
a.horizontal:水平排布
b.vertical:垂直排布
android:orientation="horizontal"
(3)android:layout_height设置组件高度
a.match_parent:占据父组件相应大小
b.wrap_content:包裹内容大小
c.50dp:设定固定大小
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:layout_height="50dp"
(4)android:layout_weight设置组件宽度
android:layout_weight="match_parent"android:layout_weight="wrap_content"android:layout_weight="50dp"
(5)android:gravity设置容器内部组件的对齐方式
a.center:水平垂直居中
b.center_horizontal:水平居中
c.center_vertical:垂直居中
d.left:靠容器左侧
e.top:靠容器上部
f.right:靠容器右侧
g.bottom:靠容器底部
android:gravity="center" android:gravity="center_horizontal" android:gravity="center_vertical"
android:gravity="left"
android:gravity="top"
android:gravity="right"
android:gravity="bottom"
ps:同一属性多组值用“|”隔开
android:gravity="center_horizontal|center_vertical"
(6)android:layout_gravity指定当前组件在容器中的对齐方式
android:layout_gravity="center" android:layout_gravity="center_horizontal" android:layout_gravity="center_vertical" android:layout_gravity="left" android:layout_gravity="top" android:layout_gravity="right" android:layout_gravity="bottom"
ps:在horizontal布局下,左右位置改变不了;在vertical布局下,上下位置改变不了
(7)android:background设定容器背景颜色或图片
android:background="@color/colorAccent"
android:background="@drawable/perfect"
(8)android:layout_margin设置外边距
(9)android:padding设置内边距
(10)android:weightSum设定容器总权重
(11)android:layout_weight设定该组件所占权重
5、相对布局
(1)相对于指定ID控件
a.android:layout_above将控件位置设定在指定ID控件之上
b.android:layout_below将控件位置设定在指定ID控件之下
c.android:layout_toLeftOf将控件位置设定在指定ID控件左侧
d.android:layout_toRightOf将控件位置设定在指定ID控件右侧
e.android:layout_alignLeft设置控件与指定ID控件左边界对齐
f.android:layout_alignRight设置控件与指定ID控件右边界对齐
g.android:layout_alignTop设置控件与指定ID控件上边界对齐
h.android:layout_alignBottom设置控件与指定ID控件下边界对齐
i.android:layout_alignBaseline设置控件与指定ID控件的基线对齐,设置边界对齐以及指定上线相对位置失效
(2)相对于父组件
a.android:layout_alignParentTop设置组件处于父容器顶部
b.android:layout_alignParentLeft设置组件处于父容器左侧
c.android:layout_alignParentRight设置组件处于父容器右侧
d.android:layout_alignParentBottom设置组件处于父容器底部
(3)居中属性
a.android:layout_centerHorizontal在父容器中水平居中
b.android:layout_centerVertical在父容器中垂直居中
c.android:layout_centerInParent在父容器中水平、垂直居中
6、表格布局
(1)android:shrinkColumns设置可收缩的列,可以指定多组值
(2)android:stretchColumns设置可伸展的列,可以指定多组值
(3)android:collapseColumns设置可隐藏的列,可以指定多组值
(4)android:layout_column指定单元格在第几列显示
(5)android:layout_span合并单元格
(6)如何确定行和列
a.如果我们直接向TableLayout中添加一个组件,该组件占满一行
b.如果我们想一行中展示多列,使用TableRow包裹多个组件
c.TableLayout布局列数由TableRow中组数最多的那一行确定
d.TableRow中宽度默认是match_parent,设置其他值不生效,高度默认是wrap_content,设置其他值也不生效
7、绝对布局
(1)坐标原点在屏幕左上角:layout_x、layout_y
8、网格布局
(1)android:rowCount设置布局总行数
(2)android:columnCount设置布局总列数
(3)android:layout_columnSpan单元格占多列
(4)android:layout_rowSpan单元格占多行
(5)android:rowWeight行权重
(6)android:columnWeight列权重
9、Android系统中引用了三个事件模型
(1)事件
(2)事件源
(3)事件监听器
10、Android中的事件监听器
(1)OnClickListener:单击事件,当用户点击某个组件或者方向键触发该事件
et_phone.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){
//三个参数:上下文对象;弹框展示内容;弹框展示事件 Toast.makeText(MainActivity.this,"执行了电话点击事件",Toast.LENGTH_SHORT).show(); et_phone.setText(""); } });
(2)OnFocusChangeListener:焦点事件,当组件获得或者失去焦点时触发该事件
et_phone.setOnFocusChangeListener(new View.OnFocusChangeListener(){ @Override public void OnFocusChange(View view,boolean b){ if(b){ Toast.makeText(MainAcitivity.this,"电话框获取焦点",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainAcitivity.this,"电话框失去焦点",Toast.LENGTH_SHORT).show(); } } });
(3)OnKeyListener:按键事件,当用户按下或者释放设备上的某个按键触发该事件
(4)OnCreateContextMenuListener:创建上下文菜单事件,当创建上下文菜单时触发该事件
(5)OnCheckedChangeListener:选项改变事件,当选择改变时触发该事件
cb_read.setOnCheckedChangeListener(new CompoundButton.OnOnCheckedChangeListener(){ @Override public void onCheckedChange(CompoundButton compoundButton,boolean b){ if(b){ Toast.makeText(MainActivity.this,"选中爱好:阅读",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this,"取消选中爱好:阅读",Toast.LENGTH_SHORT).show(); } } });
11、在程序中实现事件监听器,通常有四种形式
(1)activity本身作为事件监听器:通过activity实现监听器接口,并实现事件处理方法
(2)匿名内部类形式:使用匿名内部类创建事件监听器对象
(3)内部类或外部类形式:将事件监听类定义为当前类的内部类或普通的外部类
(4)绑定标签:在布局文件中为指定标签绑定事件处理方法
12、实现基于监听的事件处理有三步
(1)实现基于监听的事件处理步骤
(2)在事件处理方法中编写事件处理代码
(3)在相应的组件上注册监听器
13、Android为view中提供了事件处理的回调方法
(1)onKeyDown()
(2)onKeyUp()
(3)onTouchEvent()
14、TextView
(1)android:text
(2)android:textColor
(3)android:textSize
(4)android:textStyle设置字体展示样式,normal常规、bold加粗、italic倾斜
(5)android:gravity设置文本内容对齐方式
a.center_vertical垂直居中
b.center_horizontal水平居中
c.center垂直水平居中
d.left、right、top、botton居左、居右、居上、居下
(6)android:background设置背景颜色或图片
(7)android:drawableTop设置文字上方展示图片
(8)android:drawablePadding设置文字和图片之间的距离
(9)android:padding设置内边距
(10)android:autoLink
android:text="https://www.baidu.com"
android:autoLink="web"
(11)android:singleLine固定文本展示为一行
(12)android:ellipsize设定文本过长时展示样式
(13)android:focusable设定是否可以获取焦点
(14)android:focusableInTouchMode是否可以通过触摸方式获取焦点
(15)android:marqueeRepeatLimit循环次数
<!--TextView的跑马灯效果--> android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever"
15、EditText
(1)android:hint设置提示信息
(2)android:inputType
a.number:只能输入数字
b.textPassword:可以输入字母加数字格式密码
c.numberPassword:只能输入数字格式密码
d.textMultiLine:多行展示输入信息
(3)android:enabled设置是否可编辑
(4)修改光标样式
<solid android:color="#ff0000">
<size android:width="2dp">
android:textCursorDrawable="@drawable/cursor_back"
(5)错误信息展示
submit.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ if(set_error.getText().toString.equals("123")){ Toast.makeText(EditTextDemo01Activity.this,"验证成功",Toast.LENGTH_SHORT).show(); }else{ set_error.setError("验证失败"); } } });
(6)修改密码是否可见
//获取焦点起始位置 int pos = password.getSelectionStart(); //隐藏密码 if(password.getInputType() != (InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD)){ password.getInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD); }else{ //展示密码 password.getInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); }
16、Button
(1)OnLongClickListener长按监听
a.方法返回true时:长按按钮时,点击事件不响应,普通点击,点击事件仍然有效
b.方法返回false时:长按按钮,当松开按钮时,点击事件仍响应
17、RadioButton与RadioGroup
(1)使用RadioGroup进行分组,RadioGroup放置多个RadioButton,每组中只能有一个RadioButton被选中
(2)通过对RadioGroup设定OnCheckedChangeListener响应选中状态改变事件
(3)调用RadioGroup中clearCheck()或check(-1)清除选中项
18、checkBox
(1)通过CompoundButton.OnCheckedChangeListener实现选中状态改变事件监听
19、Switch
(1)android:checked设置开关默认状态,true表示开,false表示关
(2)android:textOff指定开关关闭状态展示文本
(3)android:textOn指定开关打开状态展示文本
(4)android:showText设定展示不同状态下文本显示
android:checked="true" android:textOff="关" android:textOn="开"
android:showText="true"
(5)android:thumb自定义按钮
(6)android:track自定义轨迹
(7)android:switchTextAppearance自定义不同状态下,展示文本样式
(8)OnCheckedChangeListener响应组件状态改变事件监听
20、ImageView
(1)图片尺寸大于imageView组件尺寸,src/background压缩图片展示完整的图片
(2)图片尺寸小于imageView组件尺寸,src直接展示原图,不进行拉伸;background拉伸图片,直至铺满整个组件
(3)background位于src之下
(4)src资源受scalaType属性控制,而background不受scalaType属性控制
(5)scalaType
a.matrix:以矩阵方式来绘制,从imageView左上角开始绘制图片,不缩放原图,超出的部分直接裁剪
b.center:保持原图大小,显示在imageView中心,超出部分直接裁剪
c.centerCrop:保持图像纵横比进行缩放,直至完全覆盖imageView,超过imageView部分,直接裁剪
d.centerInside:保持图像纵横比进行缩放,直至完全展示整个图片
e.fitXY:不考虑原图比例,拉伸或缩放,直至填满imageView
f.fitStart:将原图按比例进行缩放,将图片放置到imageView左上角
g.fitCenter:将原图按比例进行缩放,放置于imageView中心
h.fitEnd:将原图按比例进行缩放,放置于imageView右下角
(6)setImageResource动态设定组件展示资源
(7)setImageAlpha动态设定组件透明度
21、Android提供了对话框支持,常用的有
(1)AlertDialog提示对话框
(2)ProgressDialog进度条对话框
(3)DataPickerDialog日期对话框
(4)TimePickerDialog时间对话框
22、AlertDialog
(1)创建内部类builder
AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogDemoActivity.this);
(2)对dialog对话框相关属性进行设定
bulider.setTitle("操作提示");
bulider.setMessage("确认退出吗?");