安卓基础知识-layout布局详解。
安卓基础知识
1. 目录结构:
- src存放java源代码。
- gen存放系统自动生成的配置文件
- res存放应用用到的所有资源文件,如图片,布局等等
- drawable存放不同分辨率的图片
- layout存放布局文件
- values存放字符串strings.xml、主题,颜色、样式styles.xml等资源文件
- andriodmanifest.xml清单文件.配置一些与应用有关的重要信息,包括包名,权限,程序组件等等
- libs放置应用的第三方的jar包
- res存放应用到的所有资源
- bin存放apk文件,以及应用到被打包到apk中的资源文件
- asssets存放资源文件,不会自动生成id且不会自动占用空间
- menu是存放与菜单有关的布局文件
2. 控件:
TextView 和 EditText 的应用和区别:
TextView:显示文本框(显示静态文本)
EditText:输入文本框(输入文本)
控件的属性
- android:id -- 控件的 ID
- android:layout_width -- 控件的宽度
- android:layout_height -- 控件的高度
- android:text -- 文本内容
- android:textSize -- 文本大小
- android:textColor -- 文本颜色
- android:background -- 控件背景
- android:hint -- 输入显示文本
- android:inputType -- 输入文本类型
在res/layout目录中设置布局文件
- hint属性:提示输入信息
- text属性:与hint的区别---hint仅仅是提示;
- text是实际的内容
- 控件宽度属性layout_width的三个属性:
- wrap_content:包裹实际文本内容
- match_parent:当前控件铺满父类容器:2.3API之后添加的一个属性
- fill_parent:当前控件铺满父类容器:2.3API之前添加的一个属性
过关评测:
在Activity中需要获取一个id是bookName的TextView控件对象,
使用findViewById方法获取一个View对象,参数为控件的id,同时还需要把View对象强制转换成相应的类型
一般情况下,布局属性与对象的setXXX方法一一对应,
比如设置字体颜色,在xml中属性是android:textColor,
而在Activity中则是setTextColor方法
设置EditText的android:inputType属性可以限制文本输入类型比如
android:inputType="textPassword"为设置输入格式为密码格
android:inputType="phone"为设置输入格式为拨号键盘
3. ImageView:
是显示图片的一个控件
ImageView控件:
A:android:src="@drawable/ic_launcher"--->ImageView的内容图像
B:android:background="@drawable/ic_launcher" --->ImageView背景图片
C:ardroid:background="#00ff00" --->ImageView的RGB颜色
android:orientation="vertical" -->布局内垂直摆放
Button和ImageButton特征:
- 共有的特征
都可以作为一个按钮产生点击事件
- 不同点:
- Button有text的属性,ImageButton没有
- ImageButton有src属性,Button没有
- 产生明显的点击效果
使用中文字符声明
一般不在activity_main.xml中直接使用中文,习惯在strings.xml文件中先声明然后在activity_main.xml中通过android:text="@string/buttonname"来使用
4. 监听事件:
onClick事件:
- Button和ImageButton都拥有一个onclick,
通过自身的.setOnClickListener(OnClickListener)方法添加点击事件 - 所有的控件都有一个onclick的事件,不仅仅Button和ImageButton拥有
- 通过点击事件的监听可以实现点击按钮之后要发生什么动作
监听事件实现的几种写法:
- 匿名内部类的实现
- 独立类的实现:
所有按钮都要实现的事件。 - 实现接口的方式来实现
onc关键字调用自己独立类实现的onclick方法。(android studio)
Toast.makeText(MainActivity.this,"bt1要执行的逻辑", 1).show();
Log.i("tag","父类的onclick事件");
设置透明度:view.setAlpha(0.5f);
- 通过匿名内部类new OnClickListener,常用
- 自己写外部类接入OnCLickListener,绑定监听事件时new自己书写的外部类,这样相当于有一个独立监听事件的和一个共有的父类监听两个执行动作
- 通过接口直接在class中接入Onclicklistener,然后在绑定监听后用this 指向类中接入的onclick方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener
5. textview
- 定义textView标签的4个属性:
android:singleLine="true"//使其只能单行android:ellipsize="marquee"//去掉省略号android:focusable = "true"//使其循环android : focusableInTouchMode = "true"
- 设置跑马灯效果
android:singleLine="true"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"
- 自定义类继承TextView:
实现三个构造函数;
复写isfocued方法,返回true(默认都有有焦点,平常只有一个有焦点在 第一行上)
使用自定义的类,方法是用包名和自定义类名代替TextView(src下的包名+类名)
单位:
px / dp /dip
推荐使用dp
文字推荐使用sp
6. AutoCompleteTextView控件& MultiAutoCompleteTextView:
1.功能:
动态匹配输入的内容,如百度搜索引擎输入文本时可以根据内容显示匹配的热门信息
2.独特属性:
android:completionThreshold="2" --->设置输入多少字符时自动匹配
AutoCompleteTextView是像百度搜索框那样的,
MultiAutoCompleteTextView像qq邮箱收件人,可以多次输入和检索那样的
MultiAutoCompleteTextView控件:
独特属性:
android:completionThreshold="2" -->设置输入多少字符时自动匹配
设置分隔符
mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());mltv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
ToggleButton控件:
- 什么是ToggleButton:
ToggleButton有两种状态:选中和未选中状态并且需要为不同的状态设置不同的显示文本 - ToggleButton属性:
android:checked="true"android:textOff="关"andriod:textOn="开"
CheckBox 复选框
- 两种状态:选中状态(true)
未选中状态(false) - 属性
android:id="@+id/checkbox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:chrck="false"android:text="男"
使用onCheckedChange(...)方法监听CheckBox的状态改变事件
如果想自定义CheckBox的样式应该设置style属性
如果想CheckBox默认被选中,则需要设置android:checked="true"
RadioGroup和RadioButton
RadioButton按下去就起不来,不适合单独使用
RadioGroup和RadioButton控件:
- RadioGroup:
RadioButton的一个集合,提供多选一机制 - 属性:
android:orientation={"vertical-->垂直排布""horizontal-->水平排布"
}
决定当前RadioGroup中RadioButton以什么形式排列
vertical是垂直排列,horizontal是水平排列
布局概述
- 布局决定页面里内容的排布方式
- 布局文件位于layout文件夹下
- 线性布局(LinearLayout):可添加子类控件
一、TextView 显示文本框
二、AutoCompleteTextView
自动匹配输入内容-:completionThreshold=“1”设置输入的几字节自动匹配
三、MultiAutoCompleteTextView
自动匹配输入内容,可支持选择多个内容,可多选
layout_gravity调整该布局相对父布局的位置
gravity是调整该布局中子布局的位置
LinearLayout常用的两个属性:
使控件水平或垂直排布
- android:orientation="vertical"
--->该属性决定它子类控件的排布方式(vertical:垂直;horizontal:水平)
gravity是父容器LinearLayout指定包含控件位置所用的属性
layout_gravity是控件自己设置在当前LinearLayout中的位置 - android:gravity="center"androdi:gravity的属性可以设置多个,用"|"分隔
--->该属性决定他子类的xy的位置(常用到的几个属性值如下:)
(1)、center_vertical:垂直(Y轴)居中
(2)、center_horizontal:水平(X轴)居中
(3)、center:水平垂直都居中
(4)、right:子类控件位于当前布局的右边
(5)、left:子类控件位于当前布局的左边
(6)、bottom:子类控件位于当前的下面
子类控件:
android:layout_weight="1"本身控件占当前父容器的一个比例
android:layour_gravity="bottom"本身控件占当前父容器的xy的一个位置
如果两个控件都是铺满设置。那么权重比例将与大小相反
当作为父layout的LinearLayout的属性为androidrientation="vertical" 的时候,android:layout_gravity="?"这里设为横向的时候才能生效。比如:left,right,center_horizontal等
当作为父layout的LinearLayout的属性为androidrientation="horizental" 的时候,android:layout_gravity="?"这里设为纵向的时候才能生效。比如:top,bottom,center_vertical等;
有一个比较特殊的是center,不管是横向还是纵向的时候,它总有一个方向起作用
布局可以嵌套布局
水平的LinearLayout要从左边开始依次放置布局,所以设置TextView的layout_gravity属性为right不起作用
相对布局的属性(子类控件在RelativeLayout中常用到得属性(相对父容器的一个位置)):
1. android:layout_alignParentLeft="true" 子类控件相对当前父类容器靠左边
2. android:layout_alignParentTop="true" 子类控件相对父类容器靠上边
3. android:layout_marginLeft="41dp" 子类控件距离父类容器左边的距离
4. android:layout_marginTop="33dp" 子类控件距离父类容器上边的距离
5. android:layout_centerInParent="true" 子类控件相对父类容器即水平居中又垂直居中
6.android:layout_centerHorizontal="true" 子类控件相对父类容器水平居中
7.android:layout_centerVertical="true" 子类控件相对父类容器垂直居中
第一类:属性值为true或false
Android:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layout_centerInparent 相对于父元素完全居中android:layout_alignParentBottom 贴紧父元素的下边缘android:layout_alignParentLeft 贴紧父元素的左边缘android:layout_alignParentRight 贴紧父元素的右边缘android:layout_alignParentTop 贴紧父元素的上边缘android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
第二类控件相对于控件的:属性值必须为id的引用名“@id/id-name”
android:layout_below 在某元素的下方android:layout_above 在某元素的的上方android:layout_toLeftOf 在某元素的左边android:layout_toRightOf 在某元素的右边android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
第三类:属性值为具体的像素值,如30dip,40px
android:layout_marginBottom 离某元素底边缘的距离android:layout_marginLeft 离某元素左边缘的距离android:layout_marginRight 离某元素右边缘的距离android:layout_marginTop 离某元素上边缘的距离android:layout_margin="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:layout_marginRight="40dp"android:layout_marginBottom="40dp"
相对布局(子类控件相对子类控件的一个位置):
android:layout_below="@+id/button1" 该控件位于给定id控件(button1)的底部
android:layout_torightOf="@+id/button1" 该控件位于给定id控件的右边
android:layout_above="@+id/button1" 该控件位于给定id控件的上面
android:layout_toLeftOf="@+id/button1" 该控件位于给定控件的左边
android:layout_alignBaseline="@+id/button1" 该控件的内容与给定id控件的内容在一条线上
android:layout_alignBottom: 该控件的底部边缘与给定id控件的底部边缘对齐
android:layout_alignLeft: 该控件的左边缘与给定id控件的左边缘对齐
android:layout_alignRight: 该控件的右边缘与给定id控件的右边缘对齐
android:layout_alignTop: 该控件的顶部边缘与给定id控件的顶部对齐
RelativeLayout布局中的子布局有gravity属性
android:gravity:是针对控件里的元素来说的,用来控制元素在该控件里的显示位置。例如,在一个Button按钮控件中设置如下两个属性,android:gravity="left"和android:text="提交",这时Button上的文字“提交”将会位于Button的左部。
android:layout_gravity:是针对控件本身而言,用来控制该控件在包含该控件的父控件中的位置。同样,当我们在Button按钮控件中设置android:layout_gravity="left"属性时,表示该Button按钮将位于界面的左部。
@+id是在R.java中添加id,@id表示引用现有id
toLeftOf是在左边,toRightOf是在右边
android:gravity="center_horizontal"
A是设置子布局中内容居中
android:gravity="center_vertical|left "
B是子布局中内容左侧居中
android:layout_gravity="center_vertical|left"
C是子布局相对父布局左侧居中
layout_centerInParent是设置子布局相对父布局居中
应该是与android:layout_gravity="center_vertical|center_horizontal"类似
FrameLayout(帧布局)特性:
1、所有放在布局里的控件,都按照层次堆叠在屏幕的左上角;
2、后加进来的控件覆盖前面的控件;
3、由1和2确定:帧布局没有gravity,以及layout_gravity属性;
4、可以在控件中使用layout_gravity定义控件的放置方式
B帧布局中先添加的布局在下面
android:foreground(设置前景图,在所有子视图的前面)
android:background(设置背景)
android:keepScreenOn(保持屏幕唤醒)
android:foregroundGravity(设置前景图的位置)
五布局之绝对布局(AbsoluteLayout):
AbsoluteLayout(绝对布局)又可以叫做坐标布局,可以直接指定子元素的绝对位置(xy)
由于手机屏幕尺寸差别比较大使用绝对定位的适应性会比较差,在屏幕的适配器上有缺陷
android:layout_x="**dp" 控制当前子类控件的x位置
android:layout_y="**dp" 控制当前子类控件的y位置
屏幕的(0,0)点在屏幕左上角位置
绝对布局中 X,Y值越大位置会靠右下
五布局之表格布局(TableLayout):
TableLayout表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象。
TableLayout的属性(全局属性):
- android:collapseColumns="1,2"
-->隐藏从0开始的索引列。列直接必须用逗号隔开:1,2,5 - android:shrinkColumns="1,2"
-->收缩从0开始的索引列。当可收缩的列太宽(内容过多)不会被挤出屏幕,列直接必须用逗号隔开:1,2,5你可以通过 "*" 代替收缩所有列。注意一列能同时表示收缩和拉伸。 - android:stretchColumns="1,2"
-->拉伸从0开始的索引列。以填满剩下的多余空白空间,列直接必须用逗号隔开:1,2,5,你可以通过 "*" 代替收缩所有列。注意一列能同时表示收缩和拉伸。
TableLayout的局部属性(内部控件所用属性)
1.android:layout_column="1" -->该控件显示在第2列
2.android:layout_span="2" -->该控件占据2列宽
布局:线性布局,相对布局,帧布局,绝对布局,还有表格布局
开发中主要用线性布局和相对布局。
表格布局用于计算机布局等!
帧布局主要用于页面加载,霓虹灯等
绝对布局不怎么用
安卓基础知识-layout布局详解。相关推荐
- 计算机在线问,计算机基础知识在线测试问题详解
计算机基础知识在线测试问题详解 (75页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档题目1of100以下不属于计算机外部设备 ...
- [安卓基础] 009.组件Activity详解
组件Activity详解 这篇文章学到得内容 1.什么是Activity 2.Activity的生命周期 3.如何保存Activity的状态 4.Activity之间切换时,相互之间生命周期的执行顺序 ...
- Android 布局学习之——Layout(布局)详解一
layout(布局)定义了用户界面的可视化结构(visual structure),如Activity的UI,应用窗口的UI. 有两种方式声明layout: 1.在xml文件中声明UI组件. 2.在运 ...
- Linux操作系统基础知识命令参数详解
Linux操作系统 RAID分组 RAID JBOD RAID JBOD的意思是Just a Bunch Of Disks,是将多块硬盘串联起来组成一个大的存储设备,从某种意义上说这种类型不被算作RA ...
- Linux基础知识之systemd详解
0x00 Systemd 简述 1.Linux 启动流程 2.主角登场 0x01 Systemd Unit 1.配置文件 2.启动流程 3.进程树(Process tree) 4.运行级别 0x02 ...
- ExtJS中layout布局详解
layout中有absolute,anchor,border,accordion,card,form,table,column,fit这几种,现一一举例: 1.absolute根据字面意思就知道,是根 ...
- OpenStack基础知识-virtualenv工具详解
1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...
- 大数据学习,基础知识、发展趋势详解
1.何为大数据? 大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量. ...
- 软件开发的基础知识—软件版本号详解
经常被不同的软件版本搞得一头雾水,alpha.beta.demo.professional.enterprise等等,这些版本信息到底都有哪些实际上的含义呢? ·测试版与演示版 α(alpha)版 此 ...
最新文章
- python环境变量值_如何在python中读取Windows环境变量值?
- SimpleInjector 简单使用
- ETL工具框架开源软件
- 浙大计算机 在职博士,浙江大学在职博士含金量高吗?
- InstallShield使用——菜单部分
- cellphonedb 及其可视化
- QFile练习(20200213)
- [html] 你有使用过summary标签吗?说说它的用途
- 中发生数据丢失_如何防止Redis脑裂导致数据丢失?
- Java中Properties类的学习总结
- 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库
- 【算法理解】从头开始理解梯度提升算法
- [转]Using TRY...CATCH in Transact-SQL
- 金蝶财务软件有哪些缺点
- 付费音乐如何下载???
- 智能衣橱控制系统的设计
- wi7计算机桌面删除,如何删除win7系统桌面IE图标|win7删除桌面IE图标的方法
- 【杂谈】概率与随机以及手游抽卡机制的科普
- P9 android8 第三方,华为P9--第三方安卓8.0ROM--GZOSP Oreo--XDA 已发布!
- 【案例】用 turtle 绘制一个月饼
热门文章
- asp上传头像mysql_asp 怎么在注册页面上传头像和保存头像到数据库
- I9 9900K线程_地表最强无人撼动!i9-9900K仍是最强游戏CPU
- 免费赠送QQ币--每天骗数十万用户 专家谈网络诈骗
- 发现一张三年前飔拓科技的笔试题,清一色的数据结构和算法。
- android mimi 病毒如何,迷你脑将揭开人类朊病毒的神秘面纱
- nba2k21那个php是啥,nba2k21赛季怎么玩 nba2k21赛季玩法介绍-游侠网
- 魔兽世界60级经典旧世版本服务器架设教程
- 10款超好用的开源大数据分析工具
- 【漏洞复现】Apache Shiro 反序列化漏洞
- 代码冲突的产生以及解决方式