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,否则无法得到移动和松开事件.
控件对象.setOnTouchListener(new OnTouchListener() {
当手指被触摸时调用这个方法,参数MotionEvent事件分3种:开始触摸(按下),触摸滑动(移动),离开触摸(松开)
public boolean onTouch(View v, MotionEvent event) {
MotionEvent event的特有方法:所有方法使用event对象调用.
    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
原创粉丝点击