(1) android:padding:指的是控件中“内容”(当然,还可以是控件)和控件边之间的距离。这个是上右下左都响应,如果需要分别控制,分别使用相应的属性就行了。

(2) android:layout_marginRight="15dp":指的是view距右边view15dp,注意:我这里没有说是距父view。比如我在view中有这样一个属性android:layout_below="@id/video_seekbar",表示本view在id为video_seekbar的view的下面,然后我有android:layout_marginTop="15dp"这样的属性,表示本view距id为video_seekbar的view15dp,而不是距离父view。

(3) android:gravity:是对该view中内容(或者子控件)的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右,居中,水平居中等位置。
(4) android:layout_gravity是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置。

RelativeLayout相关的属性:

(1) android:layout_alignRight = "@id/控件id":这个属性表示当前控件的右边与指定控件“控件id”的右边对齐。看名字还有类似的其他三个属性。注意:这个属性是叠加式的,也就是说,如果设置了这些属性,控件会叠加显示。(这个属性很重要!在实际开发中很常用)

(2) android:layout_toLeftOf="@id/total_play_time":同样也是用到父view是RelativeLayout的view中,表示此view在id是total_play_time的view的左边,这个是实实在在的在控件total_play_time的左边。android:layout_toRightOf与之对应。

(3) android:layout_below="@id/video_seekbar":同样也是用到父view是RelativeLayout的view中,表示此view是id是total_play_time的view的下边。android:layout_above与之对应。(上面的四个属性属于一组属性,这组属性是真正意思上的位置上下左右,也就说,不是叠加显示)

(4) android:layout_centerInParent="true":表示子控件在父控件中水平垂直居中。android:layout_centerHorizontal和android:layout_centerVertical分别控制水平和垂直。

(5) 对于RelativeLayout布局来说,如果它有多个子控件或子布局,如果不对这些子控件或子布局进行指定位置,这些子控件或子布局会叠加到一起。

20150115

在实际开发中,我们会用这样的需求,就是随着“状态”的变化,要求对View的位置进行变换。我们可以get到View的LayoutParams,然后调用View的setLayoutParams,在setLayoutParams中会调用requestLayout()。基本思想就是这样的,不过在实际应用中会遇到很多问题。

比如:我遇到的问题。

我的父控件是一个RelativeLayout,里面有个ImageView子控件,需求是在不同场景下ImageView位置需要变换。

(1)

                RelativeLayout.LayoutParams rl = (android.widget.RelativeLayout.LayoutParams) focusView.getLayoutParams();                rl.addRule(RelativeLayout.ALIGN_PARENT_TOP);                focusView.setLayoutParams(rl);
单看上面代码是没有任何问题呢,让focusView和RelativeLayout的顶部对其。

                RelativeLayout.LayoutParams rl = (android.widget.RelativeLayout.LayoutParams) focusView.getLayoutParams();                rl.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);                focusView.setLayoutParams(rl);
这样就会有问题了,这样既会 ALIGN_PARENT_TOP又会 ALIGN_PARENT_BOTTOM,这一定要注意。
我的解决办法,是每次都new一个RelativeLayout.LayoutParams。

(2)还有一个问题:

如果你的RelativeLayout的layout_width和layout_height都是wrap_content这样在使用上面方法变换focusView的位置的时候就会出问题。所以最好能限定RelativeLayout的大小。

(3)为什么我们不采用View的layout()方法就行重新布局呢?

有几个问题,layout方法有时不管用,还有就是输入法出来以后layout之后的位置会还原,还有就是我感觉layout方法实际没有导致View的位置和大小真正改变。

这些问题都得看源码深入研究。



SeekBar:

android:minHeight="10dp"
android:maxHeight="10dp"这两个属性用于控制SeekBar的高度。

android:progressDrawable="@drawable/seekbar_style"

HorizontalScrollView

在代码中通过.setHorizontalScrollBarEnabled(false);设置滚动条不显示。

在开发中布局文件的选择是很重要的,不同的需求需要不同的Layout。

假如,我们想实现这样一个需求,首先看到一个Loading界面,然后显示加载完的数据。那么,最外面的Layout就应该是FrameLayout,采用帧布局。这点很重要,采用其他Layout不会实现这种效果。

TextView

textView是可以设置背景图片属性的,可是在实际开发中,给textView设置了背景图片,让textView中的文字居中,文字总是偏下不居中,不知道为什么。

//用于描述文字的大小、颜色、粗体等

videoTitle.setTextAppearance(context, R.style.play_controller_style);

//文字过长,省略号的位置
videoTitle.setEllipsize(TruncateAt.END);

//最多显示多少个字
videoTitle.setMaxEms(15);

//是否是单行
videoTitle.setSingleLine(true);

RelativeLayout代码布局的一个例子:

package com.sailang.layout.RelativeLayout;import android.app.Activity;import android.os.Bundle;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.RelativeLayout;/** *  * @author zhongyili * */public class RelativeLayoutTest extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                RelativeLayout container = new RelativeLayout(this);        RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);        container.setLayoutParams(rl);                Button center = new Button(this);        center.setId(10001);        //需要给centernew一个参数对象        //仍然采用rl引用,我觉得更能保证rl指向的上一个对象,能够很好的释放,我不知道对不对        rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rl.addRule(RelativeLayout.CENTER_IN_PARENT);        center.setLayoutParams(rl);        center.setText("中");                Button up = new Button(this);        rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        //两个rule才能觉得其位置        rl.addRule(RelativeLayout.ABOVE, center.getId());        rl.addRule(RelativeLayout.ALIGN_LEFT, center.getId());        up.setLayoutParams(rl);        up.setText("上");                Button down = new Button(this);        rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rl.addRule(RelativeLayout.BELOW, center.getId());        rl.addRule(RelativeLayout.ALIGN_LEFT, center.getId());        down.setLayoutParams(rl);        down.setText("下");                Button left = new Button(this);        rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rl.addRule(RelativeLayout.LEFT_OF, center.getId());        rl.addRule(RelativeLayout.ALIGN_TOP, center.getId());        left.setLayoutParams(rl);        left.setText("左");                Button right = new Button(this);        rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);        rl.addRule(RelativeLayout.RIGHT_OF, center.getId());        rl.addRule(RelativeLayout.ALIGN_TOP, center.getId());        right.setLayoutParams(rl);        right.setText("右");                container.addView(center);        container.addView(up);        container.addView(down);        container.addView(left);        container.addView(right);                setContentView(container);    }}




更多相关文章

  1. android:windowSoftInputMode属性详解以及editText监听键盘回车
  2. Android知识巩固—四大组件能否开多进程
  3. Android下affinities和任务(task)
  4. Unity与Android之间的交互之AndroidManifest
  5. 解决使用Android(安卓)emulator(模拟器)无法上网的现象
  6. Android(安卓)UI自动化测试最佳实践
  7. Android(安卓)如何创建组合控件
  8. 自定义Android组件之带图像的TextView
  9. android学习-动画(基本的四种动画)

随机推荐

  1. Android(安卓)Studio安装配置及使用
  2. Android(安卓)ImageView设置边框
  3. Android(安卓)Activity 常用功能设置(全屏
  4. Android(安卓)Studio报错:the minSdk vers
  5. android 通过网址或者域名得到IP地址
  6. Android(安卓)判断某个APK是否已安装
  7. android小功能实现之SQLite数据库的基本
  8. [Android实例] android多点触摸demo
  9. Android(安卓)红圈营销项目 —— 自定义
  10. Android叠加更新