Android的5种布局(实际4种)
来源:互联网 发布:淘宝怎么买weed叶子 编辑:程序博客网 时间:2024/05/18 13:07
常见布局: A.安卓中每一个控件都要指定layout_width与layout_height的属性.
B.布局内部控件无论是创建id,还是互相之间引用时指定id,一律用android:id="@+id/xxxid名",可以减少bug
C.布局文件的名字必须全部都是小写字母!
D.java里id命名最好和xml布局控件的id名一样.可以减少bug,方便查找代码.
5种布局,都是ViewGroup的子类
布局 layout_???是控件相对于外部的位置(比如说在父控件的哪个位置,在旁边控件的哪个位置);gravity
是规定控件内部元素的位置(元素在内部的什么地方)
宽高 match_parent:匹配父窗体(铺满,代替了fill-parent)
通用 wrap_content:包裹内容(内容体有多大就包裹多少)
属性 安卓所有控件都要指定宽和高
ViewGroup与view的区别: ViewGroup有子控件. view:是所有控件的父类(包括ViewGroup)
ViewGroup(容器控件):getChildCount():获取容器内子控件的数量 getChildAt(int);:获取相映位置的子控件
通用: padding: 当前控件的子控件或内容相对于当前控件的间距,对内.
margin:当前控件相对于四周控件或父控件的间距(需要加位置),对外;
visibilit:设置当前控件显不显示,一般设为不显示invisible(看不见但控件依然占着位置) ,gone的消失不仅看不见,连位置都不占了 ,显示时的属性是visible,通过java代码来实现,控件..setVisibility(View.INVISIBLE);
给控件设置触摸事件:注意一定要把onTouch的return返回默认值false改为true,否则无法得到移动和松开事件.
当手指被触摸时调用这个方法,参数MotionEvent事件分3种:开始触摸(按下),触摸滑动(移动),离开触摸(松开)
public boolean onTouch(View v, MotionEvent event) {
MotionEvent event的特有方法:所有方法使用event对象调用.
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
........
break;
case MotionEvent.ACTION_MOVE:
........
break;
case MotionEvent.ACTION_UP:
.........
break;
}
return false;//,false代表的是事件没有处理完毕,等待事件处理完毕, true代表事件已经处理完毕了.
}
getX->获取触摸控件的X轴坐标点, getY->获取触摸控件的Y轴坐标点 一般在ImageView或者像素等有关的地方使用
getRawX->获取触摸屏幕的X轴坐标点 getRawY->获取触摸屏幕的Y轴坐标点
getX,Y与getRawX,Y的异同:都是获取触摸的坐标点,只不过getX获取的距离是相对于控件开始的距离,而getRaw是相对于屏幕开始的
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
........
break;
case MotionEvent.ACTION_MOVE:
........
break;
case MotionEvent.ACTION_UP:
.........
break;
}
return false;//,false代表的是事件没有处理完毕,等待事件处理完毕, true代表事件已经处理完毕了.
}
});
EditText(输入文本控件)的一些属性:hint:输入框里提示语,一点就消失了. phone:只能输入电话号码
inputType(定义输入框里输入的内容类型):number:只能输入数字 numberPassword:只能输入数字密码,显示的是****. textPassword:各种形式的密码
获取EditText内容固定模式:
EditText对象.getText()//得到数据 再.toString()//把数据变为字符串 .trim()//去掉字符串两端的空格
完整模式(一般情况是这样):EditText对象.getText().toString().trim(); 返回结果一个String类型.
紧接着是一个判断,判断所得的的字符串是否为null,大小是否为0.TextUtils.isEmpty(String)true,为空.
if(TextUtils.isEmpty(String)){为null,对应的处理代码,一般是:一个吐司提醒,return ;}
TextView(文本控件):setText-->输入文字 setTextSize-->设置文字大小 单位sp setTextColor-->设置文字颜色
singleLine="true"-->如果为true,设置文本只能单行显示,超过一行的数据内容,不再显示. lines="int"-->设置文本显示为大小为两行
setBackgroundColor(Color.RED)-->为TextView设置背景的颜色
CheckBox(复选框控件):isChecked():判断复选框是否勾选,如果为true,则勾选了;
(java代码中) 选中状态的监听事件-->setOnCheckedChangeListener();
RadioButton(单选框控件):放在<RadioGroup></RadioGroup>里,且RadioGroup里可以指定控件指向orientation
单选控件默认选中:checked="true" 隐藏RedioButton里的小圆点:button="@null"
RadioGroup里的方法:getCheckedRadioButtonId(),获取选中单选框控件的id,返回结果为int.
<ScrollView></ScrollView>:使包裹的控件具备滚动效果.只能有一个直接子控件(只能包裹一个控件,不过可以包裹一个布局容器,可以在布局容器里有多个控件)
android:scrollbars="none":使ScrollView不显示右边的竖条
<ImageView/>:包裹一个图片,
在java代码里:setImageResource(图片资源):来设置包裹的图片资源
setScaleType(ScaleType.FIT_???);:来设置包裹图片在控件的显示(ScaleType.FIT_xy,代表了图片填充ImageView控件)
B imageView,本身具有的属性,动态的(在java代码中)设置其水平的位置
iv.setTranslationX(100);
A imageView,本身具有的属性,动态的(在java代码中)设置其垂直的位置
iv.setTranslationY(200);
//注意:A,B方法都是安卓在3.0以后出现的新特性,所以要把AndroidManifest.xml里的android:minSdkVersion值修改为11以上
在XML布局文件里的设置:
因为图片不够大,所以使用到了scaleType属性,设置fitXY属性,使图片填充满整个ImageView控件.注意:ImageView控件如果宽高定义的是wrap_content,则设置fitXY属性会不起效果.<ImageView
android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitXY"android:src="@drawable/???"/>
<ProgressBar/>(进度条):设置完宽高后,默认是一个圆圈加载.
(常放在LinearLayout中,使用LinearLayout">"内的visibility属性,来控制ProgressBar的显示与隐藏,
LinearLayout对象.setVisibility(View.INVISIBLE)隐藏, View.GONE是LinearLayout连带着在里面的进度条也消失,位置都不占 View.VISIBLE是显示.
长条进度条:ProgressBar:android:max="100",设置总共的百分比, 进度条对象.setProgress(int x);//设置进度条所用的比例
SeekBar 拖动条:progress-->设置seekBar停留的位置 getProgress()->获取seekBar停留的位置 max-->设置最大长度
拖动的监听事件-->SeekBar对象.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
// 当SeekBar进度条结束拖动时,执行该方法.
public void onStopTrackingTouch(SeekBar seekBar) {
}
// 当SeekBar进度条开始拖动时,执行该方法
public void onStartTrackingTouch(SeekBar seekBar) {
}
// 当SeekBar进度条在拖动中时,执行该方法
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
}
});
<view>:可以设置宽高,及background(背景),是一个矩形,一般把高设置为1dp,被当做一条区分线,来使用,是控件之父.
可以设置点击事件->setOnClickListener
指定页面里的控件,对页面四周保持16dp的距离,一般刚建项目时,第一个布局自带的效果
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
1.线性布局 LinearLayout(非常常用):在里面控件上下顺序,也决定了他们在布局中的位置.
orientation(指向):垂直(上下vertical)和水平(左右horizontal)两种(常用)
如果是设置的是竖直方向 里面的子控件 只能在竖直方向排列
如果是设置的是水平方向 里面的子控件 只能在水平方向排列
weight 权重(比例值) 控制控件在父窗体里面显示的比例。比例为控件的weight值之和比上weight的值.是LinearLayout特有的方法.
注意:使用前,如果是划分宽的比例,要把宽的像素改为"0xp",如果是高也是如此.
提示:也可以对一个控件宽高的某个属性,这样定义android:layout_width="match_parent",然后在指定权重为1:android:layout_weight="1"
效果:,这样这个控件会占用很大的比例.而另一控件包裹属性,也是会显示出来的
gravity:对子控件控制显示位置
layout_gravity: 确定自己在父控件里的位置
2.相对布局(常用) RelativeLayout 都是从左上角开始布局的,每个控件都需要一个相对的位置
使用前都要先为控件设置ID号:添加格式, 调用格式::@+id/名字
如果没有指定控件的相对的位置,控件会层层叠加到左上角,且最后一个定义(也就是最下面)的控件会覆盖上面所有的控件.
特点:以某个控件为参考,来放置其他控件的位置
针对于父窗体来说
id值
layout_alignParentLeft:位于父窗体的左侧
layout_alignParentRight:位于父窗体的右侧
layout_alignParentTop:父窗体的顶部
layout_alignParentBottom:父窗体的底部
具体dp值
marginTop:父窗体的顶部多少距离
marginBottom:父窗体的底部多少距离
marginLeft:位于父窗体的左侧多少距离
marginRight:位于父窗体的右侧多少距离
整体来说:
layout_centerInParent:父窗体居中(传boolean,true为使用)
layout_centerHorizontal:父窗体横向居中(传boolean,true为使用)
layout_centerVertical:父窗体垂直居中(传boolean,true为使用)
针对某一个控件来说:
layout_alignBaseline:和某一个控件基准线对齐(这个用于控件里面文字需要水平对齐时用)
layout_alignLeft:与某个控件左侧对其
layout_alignRight:与某个控件右侧对其
layout_alignTop:本控件的顶部和某一个控件顶部对齐
layout_alignBottom:本控件的底部和某一个控件底部对齐
layout_below:在某个控件的下方
layout_above:在某个控件的上方
layout_toLeftOf:在某个控件的左边
layout_toRightOf:在某个控件的右边
注意:线性布局里可以使用到相对布局里的因素,但相对布局不能使用线性布局的因素.
3. 帧布局 FrameLayout(一般自定义控件都是继承FrameLayout) 一层覆盖一层,后面的可以覆盖前面的
4. 表格布局 TableLayout(不常用)
TableLayout中的一个TableRaw代表一行,TableRaw中的一个控件代表一列,里面的子节点可以使用weight属性
5. 绝对布局 AbsoluteLayout>废弃,不推荐使用。
布局控件也可以当做容器,定义在别的布局下;当布局是容器时,可以使用这些方法
getChildAt(int):获取容器中相应角标对应的子控件(从角标开始0) 返回结果VIew,用时根据情况强转
getLeft():获取子控件距离父控件左边的距离(用两次可以,相减可以得到两控件之间的距离. 返回结果为int
单位:dip或dp(device independent pixels):像素(不依赖设备像素,依据设备自动适应大小,推荐使用。)
sp(scaled pixels):比例像素(专门用于设置字体的大小)。
布局控件通用属性:前提1.为布局控件设定id,2.是在java代码里
addView: 布局控件id.addView(控件对象->往布局控件里添加子控件.
removeAllViews(): 布局控件id.removeAllViews()->清空线性布局里的控件.
1 0
- Android的5种布局(实际4种)
- android xml布局文件中wrap_content的实际大小
- android 的5种布局
- Android的5种布局
- Android--五大布局(4)绝对布局AbsoluteLayout (实际中很少用到)
- android 5种布局
- Android中布局的5种模式
- android的5种布局方式
- Android中的5种布局的分析
- Android 的 几种布局
- android的四种布局
- android的几种布局
- Android的五种布局
- Android中5种布局
- 【UI布局优化】Android布局优化的几种方式
- Android的几种常用的布局
- android 布局浏览效果,与实际效果不一致问题
- android学习笔记4-几种常用布局的介绍
- java概念
- python find()用法 适用于Python3.x
- 工厂模式
- Java从文件中读取字节数据的固定套路
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(01背包,多重背包)
- Android的5种布局(实际4种)
- Docker安装与配置
- MVC与MVVM模式的对比
- javascript对象
- 12、css3 2D变换
- IO/NIO 例子
- MFC利用OpenCV读取摄像头
- Ubuntu安装Kali Linux渗透测试工具
- 对oracle PL/SQL Developer配置instantclient