首页 > 程序开发 > 移动开发 > Android >

android布局相关知识

2016-06-14

五大布局:FrameLayout (帧布局) LinearLayout (线性布局) AbsoluteLayout(绝对布局) RelativeLayout(相对布局) TableLayout(表格布局)

布局是用来装控件,也是规定控件的排列方式的;
五大布局:FrameLayout (帧布局)
LinearLayout (线性布局)
AbsoluteLayout(绝对布局)
RelativeLayout(相对布局)
TableLayout(表格布局)
FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局 (android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。
RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;
TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
View的属性
View及其子元素常用属性:(各种布局及控件的共同属性)
android:id @+id/名字 @id/名字
android:background 背景图或背景色
#rbg
#argb alpha ===透明度
#rrggbb 与 #rgb区别 16进制 ff=256
#aarrggbb
#图片
android:onClick 为该控件的单击事件绑定监听器 --Button讲
android:padding 设置控件四周的填充区域 内边距
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop= 四个属性 == android:padding
如果写在布局里就是控制控件相对布局的边距
如果写在控件里就是控制控件内容相对控件的边距
android:visibility 设置该控件是否可见
visible 可见
invisible 不可见 但是占着位置
gone 不可见 不占位
android:alpha 设置该组件透明度(0-1)
android:layout_height 组件的布局高度
android:layout_width 组件的布局宽度
定值 单位 dp match_parent fill_parent 2.2过时 推荐使用 match_parent
wrap_content 包裹内容 推荐使用 用屏幕适配
android:layout_margin 设置子组件的 --外边距
一般应用于聊天界面 聊天内容句图片的边界
线性布局属性:
1.android:orientation vertical 、 horizontal 规定子控件 和组件的排列方式 只有水平和垂直 如果已经到屏幕边缘也不会拐弯
2.android:layout_weight 设置控件的权重。 屏幕适配*** 重要 按比例分
1. 把android:layout_width或者android:layout_height = 0dp 再android:layout_weight属性 水平宽 垂直高
2. LineearLayout权重总值 等于android:weightSum="2"值 如果 android:weightSum 不存在 才等于子空间权重值的和
3. 权重属性 控件本身宽度或者高度 + 布局剩余宽度或者高度所占权重比
0 + (1-(0+0))/3 = 1/3
0 + (1-(0+0))/3*2 = 2/3
          1        + (1-(1+1))/3 = 2/3
1 + (1-(1+1))/3*2 = 1/3
1 + (1-(3))/8*3 = 1/4
1 + (1-(3))/8*2 = 2/4
1 + (1-(3))/8*3 = 1/4
3.android:gravity
父对子 属性写在父里 控制子控件或者内容的排列位置
例如: 写在Layout 控制子控件的位置
写在控件里 控制内容的位置
bottom top left right center_vertical center_horizontal center
属性可以拼接 需要 | 分开 center_vertical|center_horizontal相当于 center
相对布局 线性布局都可用 控件也可用
4.android:layout_gravity
子对父 属性写在子里 控制子控件本身相对于父布局的位置
注意:layout_gravity需要看父布局的排列方向(android:orientation)
if 父布局是vertical layout_gravity值 和垂直有关的属性不能生效
if 父布局是horizontal layout_gravity值 和水平有关的属性不能生效
RelativeLayout 相对布局
布局对布局的相对位置
控件对布局的相对位置 属性写在 子控件里边的
控件对控件相对的位置
A、第一组:指兄弟控件之间的相对位置。该组属性的值是另一个控件的id。
layout_toRightOf 该控件在哪个控件的右侧
layout_toLeftOf 该控件在哪个控件的左侧
layout_above 该控件在哪个控件的上侧
layout_below 该控件在哪个控件的下侧
B、第二组:指兄弟控件之间的对齐关系。该组属性的值是另一个控件的id。
layout_alignRight 该控件与哪个控件的右对齐
layout_alignLeft 该控件与哪个控件的左对齐
layout_alignTop 该控件与哪个控件的顶对齐
layout_alignBottom 该控件与哪个控件的底对齐
C、第三组:指控件与父布局之间的对齐关系。该组属性的值是true或者false。
layout_alignParentRight 该控件与父布局控件的右对齐吗?
layout_alignParentLeft 该控件与父布局控件的左对齐吗?
layout_alignParentTop 该控件与父布局控件的顶端对齐吗?
layout_alignParentBottom 该控件与父布局控件的底部对齐吗?
layout_centerInParent 该控件位于父布局控件的中心位置吗?
layout_centerVertical 该控件位于父布局控件的垂直中心位置吗?
layout_centerHorizontal 该控件位于父布局控件的水平中心位置吗?
android基础控件
TextView 文本视图
EditText 文本编辑框
Button 按钮
ImageView、Gallery 图像视图、画廊(建议过期)
ImageButton 图片按钮
ToggleButton 、Switch 开关按钮、开关
RadioButton 单选按钮
CheckBox 多选框
Spinner 下拉列表
AutoCompleteTextView 自动完成文本框
ProgressBar 进度条 用户体验度 很重要
SeekBar 拖动条
RatingBar 星级评分条
TimePicker、DatePicker 时间选择器、日期选择器
AnalogClock、DigitalClock 模拟时钟、数字时钟
Dialog(AlertDialog、ProgressDialog、TimePickerDialog、DatePickerDialog)提示对话框、进度对话框、时间选择对话框、日期选择对话框
ListView、GridView 列表视图【最重要的UI组件】、 网格视图
ScrollView 滚动视图
ExpandableListView 可展开列表视图
WebView 网页视图
SearchView 搜索框
TabHost 书签选项卡
Notification 、Toast 通知 、 吐司轻量级的提示(短时提醒)
Menu(OptionMenu /SubMenu、ContextMenu) 菜单(选项菜单、上下文菜单)
ImageSwitcher、TextSwitcher 图像切换器、文本切换器 CardView
ActionBar 动作导航条 ToolBar
TextView
android:textColor 设置文本的颜色
android:textSize 设置文本的字体大小(sp)
android:inputType 设置文本的类型。例如是普通文本,还是email,password,数字等等。 最终目的 就是为了提高用户体验度 最常用: textPassword phone number numberPassWord
android:singleLine 设置文本是否是单行显示。
开发使用: 用于单行商品介绍,防止布局错位
android:gravity 设置文本框内文本的对齐方式。可选项有:top、bottom、left、right、center、fill、center_vertical、
android:drawableLeft 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
android:drawableRight 用于在文本框右侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
android:drawableTop 用于在文本框上侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
android:drawableBottom 用于在文本框下侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
用做底部导航栏 例如微信底部
android:autoLink 给指定的文本增加可单击的超链接。可选项为:none、web、phone 和all。多个选项之间使用“|”分隔,也可以使用all。根据你制定类型 跳转到指定的程序 : 如 phone类型 android:text=“1111” 回跳到拨号界面
android:hint 设置当文本框内文本内容为空时,默认显示的提示性文字。 用在 EditText 提示输入内容
android:textColorHint="" 虚提示的颜色
android:textAllCaps="true" 设置所有字母都大写
2、 文字过长,设置省略号。可选项:start , end ,middle,marquee
android:ellipsize="start" 省略号在开头
android:ellipsize="middle" 省略号在中间
android:ellipsize="end" 省略号在结尾
1.width 为固定值 10dp match_parent 文本内容必须要长于width
2.singleLine = true
【备注:】要实现跑马灯效果。要同时具有以下属性。
android:ellipsize="marquee"
android:singleLine="true"
android:focusable="true" 是否可以获取焦点
android:focusableInTouchMode="true" 当触摸的时候是否获取焦点
android:marqueeRepeatLimit="marquee_forever" 跑马灯的模式
跑马灯的条件:
width 为固定值 10dp match_parent 文本内容必须要长于width
2.singleLine = true
Button EditText 他们的父类是TextView
android:background="@null" 去输入框下划线
android:inputType=""
只要类型前面带 text 例如:textPassword 弹出软件盘类型是 文本类型
只要类型前面不带 text 例如 number 弹出数字类型
但是:phone 和 number date time 有一些不同
只要类型后面带PassWord 你输入的内容会自动隐藏 --》 用来做登陆密码
Button
监听你点击Button 这就叫点击监听
1. onClick属性方法 //当需要点击监听控件少于2个的时候 建议用
(1)在XMLLayout中 给控件添加 android:onClick = "方法名"
(2)在Acticity中 定义一个类型为public类型的方法 参数为View 例如 public void xml中onClick里的方法名(View v){执行方法体}
android:clickable="true" 是否可以点击
Button 默认可以点击 。 TextView默认不可以点击,如果需要在布局中 声明onClick 需要同时写 android:clickable="true"
不需要在Activity中声明控件,但需要控件的点击监听方法
2. 直接设置监听者 利用匿名内部类 //当需要点击监听控件少于2个的时候 建议用
signButton.setOnClickListener(new OnClickListener() {
@Override //当你点按钮 就走这里 v就是你点击的那个按钮
public void onClick(View v) {
// TODO Auto-generated method stub
//v强转成button再获取text再转成字符串
String str = ((Button)v).getText().toString();
//Toast提示 上下文对象 内容 显示时间 显示
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}
});
3. Activty impelements OnClickListener //当页面需要点击监听的控件多的时候 用它,开发中也是最常用的
1.Activity 实现 OnClickListener
2.添加未实现的方法 : onClick(View v)
3.给控件添加监听事件 控件.setOnClickListener(this)
如何获取View id
//获取View id
int id = v.getId();
ImageView ImageButton
scaleType
matrix 从图片的左上角开始绘制,当图片大于ImageView 图片不会压缩 也显示不全 能显示多大就多大,当图片小于于ImageView 图片不会放大 在ImageView的左上角开始显示
fitxy 会放大或缩小图片 全部显示在ImageView 但不会按原来的笔记缩放或者放大 能填满就行
***开发中 :最长使用的
fitStart 按比例缩放,当图片 宽>高 ImageView 宽会被填满 高会有剩余 ,ImageView没沾满 图片显示全,当图片 宽<高 ImageView 高会被填满 宽会有剩余 ,ImageView没沾满 图片显示全
fitEnd 正好和fitStart相反
fitCenter 默认模式 当图片宽高比不为1:1 图片显示全了 比例没改变 ImageView显示不全
当图片宽或者高到达 ImageView的边框时 图片显示就固定了
center 图片和ImageView中心对齐 图片大 就截取ImageView边框大小部分的图片
图片小 在ImageView中间全部显示
centerCrop 以图片的小边基准 填充ImageView 按原比例,大边溢出的部分修剪掉
图片显示不全---》大边部分显示不全
centerInside 以图片的大边基准 填充ImageView 按原比例,图片会显示完全 ImageView没占满
在代码中改变图片显示
//方法比较简单 直接引用资源ID R.drawable.图片名 显示res下边的图片 Assets无法显示
1.imageView.setImageResource(R.drawable.ic_launcher);
2.setImageBitmap();
/**
* 拿到Aseets包下的一张图片 转成Bitmap 最后赋给ImageView
* Aseets 不会在R文件生成索引
* 通过Stream去拿
* 1.获取 AssetManager 也就是 Assets管理器
* 2.利用 AssetManager 的open方法去打开一个文件 等到一个流
* BitmapFactory 通过位图工场 把输入流转成一个Bitmap图片
*/
AssetManager manager = this.getAssets();
InputStream inputStream;
try { //fileName 全称
inputStream = manager.open("bg.png");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
****getResources() 获取res资源
3.imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
CheckBox
android:checked="true" 是否选中
isChecked() 它就是判断checkBox是否选中
setChecked(boolean) checkBox设置是否选中
点击监听事件 OnClickListener
* 选中监听事件 CompoundButton 是 CheckBox 父类 onCheckedChanged
* onCheckedChanged OnClickListener 区别: 1.监听状态 2.监听动作
RadioGroup RadioButton 单选框
setBackgroundColor 放背景颜色
setBackground 设置背景Drawable
View getChildAt(int index)
Returns the view at the specified position in the group.
int getChildCount()
Returns the number of children in the group.
//获取RadioGroup 被选中状态的RadioButton 相当于监听事件的第二个参数
group.getCheckedRadioButtonId();
Selector 选择器 ***用户体验度 每个项目必须要做的
checked 选中状态 长时间保持
pressed 按压状态 即时 在按压的时候生效
高级控件之AdapterView
1.数据框架重复显示
Spinner下拉框
XML Attributes
Attribute Name Related Method Description
android:dropDownHorizontalOffset setDropDownHorizontalOffset(int) Amount of pixels by which the drop down should be offset horizontally.
android:dropDownSelector List selector to use for spinnerMode="dropdown" display.
android:dropDownVerticalOffset setDropDownVerticalOffset(int) Amount of pixels by which the drop down should be offset vertically.
android:dropDownWidth setDropDownWidth(int) Width of the dropdown in spinnerMode="dropdown".
android:gravity setGravity(int) Gravity setting for positioning the currently selected item.
android:popupBackground setPopupBackgroundResource(int) Background drawable to use for the dropdown in spinnerMode="dropdown".
android:prompt The prompt to display when the spinner&#39;s dialog is shown.
android:spinnerMode Display mode for spinner options.
1.//填补数据
android:entries
1.1 数据来源
res 自己定义的资源文件 --》 values--> strings.xml
值1
值2
1.2形势分析:
1、简单 方便 快捷
劣势:
无法动态改变显示内容
1.2 xml中赋值
android:entries=“@array/数组名字”
android:prompt
1.数据来源
不能直接带xml中写入,需要引用res-values-strings
注意: spinnerMode (dropdown,dialog) 只用模式是dialog的时候才会显示提示!!!!
android:spinnerMode
模式种类
dropdown 下拉框
dialog 弹出框
android:dropDownHorizontalOffset 在4.0以后不生效 android:padiingLeft
Spinner src中使用:
1. 三要素: AdapterView , Data Adapter
2. Adapter类型:
1.ArraAdapter ---》 显示单条内容为文本的时候 使用它
ArraAdapter adapter = new ArraAdapter( 1, 2 ,3 );
1.Context 上下文对象 Activity.this
2.单条布局 ---》 TextView --> android.R.layout.simpler_item_list_1
3.Data --> collection 数组和集合
动态添加数据:
adapter.addAll(数组或者集合);
adapter.add(字符串);
2.SimpleAdapter
可以显示 图文混排,但是,这里的图片只能是来之res-drawable的图片 如果网络图片 BaseAdapter
3.CursorSimpleAdapter
Cursor数据库数据 CursorSimpleAdapter专门用来显示数据库查到的数据的,数据里必须要有一个字段_id;
select id _id from dbName where
4.BaseAdapter
可以显示 图文混排,还自定义单条视图,例如QQ聊天单条视图等, 比SimpleAdapter好处是,可以显示网络图片
3.如何显示让Spinner/AdapterView显示
1.定义Adapter
2.数据给Adapter
3.AdapterView.setAdapter(适配器);
4.Spinner监听事件:
OnItemSelectListener 四个参数: AdapterView , View ,Position,Id
AdapterView : 你点击的那个AdapterView
View : 点击的单条视图
Position : 点击了第几条
Id : 每条都会定义一个Id ,Id默认和Position相同
SimpleAdapter
数据类型
List>
/***
* context: 上下文对象
* data : 数据
* resource: 自定义item布局
* from: 单条map的key
* to : 单条map的Values对应的控件Id 切记 一一对应
*/
final SimpleAdapter adapter =
new SimpleAdapter
(MainActivity.this, list, R.layout.spinner_item,
new String []{"pic","name"}, new int []{R.id.fruit_pic,R.id.fruit_name});
AutoCompleteTextView
android:completionThreshold 从第几个开始提示
android:dropDownAnchor 在某个控件的下方提示下拉框
textView.addTextChangedListener(new TextWatcher() {
//*** onTextChanged beforeTextChanged 方法里 不可以对文本进行操作 避免死循环
@Override //光标的位置 //改变后还剩几个 //改变数量
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Log.e("onTextChanged", "s:"+s+" start"+start+" before:"+before+" count:"+count);
}
@Override //改后的数量
public void beforeTextChanged(CharSequence s, int start, int count,
//改变之前有几个
int after) {
// TODO Auto-generated method stub
Log.e("beforeTextChanged", "s:"+s+" start"+start+" before:"+after+" count:"+count);
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Log.e("afterTextChanged", "s:"+s);
//判断输入长度
try {
Integer.parseInt(s.toString());
} catch (Exception e) {
// TODO: handle exception
Toast.makeText(MainActivity.this, "你输入的不是数字", 1).show();
}
}
});
相关文章
最新文章
热点推荐