android布局属性使用说明和一些开发经验

(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);
    }
}


 

 

 

 

 

 



你可能感兴趣的:(android布局属性使用说明和一些开发经验)