Android:layout_width和Android:width的区别

时间:2024-11-09 19:33:06

前言:今天看属性动画时发现当我们对一个Button按钮做动画时是没有效果的(解决办法),代码如下:

private void performAnimate(){
    (mButton,"width",500).setDuration(5000).start();
}

@Override
public void onClick(View v){
    if(v == mButton) {
        preformAnimate();
    }
}

我们都知道属性动画需要动画作用的对象提供该属性的get和set方法,而Button中的getWidth和setWidth方法是继承与TextView中的方法,接下来大家就要去看一看源码,setWidth的源码如下:

可以看到我们设置的是它的最大宽度和最小宽度。

TextView的最大宽度和最小宽度对应的是xml文件中的android:layuout_width属性,而TextView还有一个属性Android:width,这个Android:width属性就对应了TextView的setWidth方法。

那么Android:layout_width和Android:width的区别到底是什么呢

就此我去网上搜了很多方法,答案和下面的都差不多

  • android:layout_width 只有三种选择一个是fill_parent ,二是wrap_content,三是match_parent
  • android:width 这个是用来view的具体宽度的,以像素为单位。

写过布局的我们也都知道,layout_width也支持具体数值,width也支持各种单位dp、px、甚至sp。那么这两个属性到底有什么区别呢?

首先我们应该知道一个控件的大小并不是由它自己本身来决定的,而是由父布局和它自身一起来决定的。

而layout_width就是父布局允许view所占的宽度,而width是view的自身宽度。在layout_width和width都设置为具体数值的时候,width其实就无效了,这也不难理解,父布局已经给你分配了具体的空间,不论view怎么设置width,view的宽度也只能是layout_width。

那么什么情况下,width也会起作用呢?当我们把layout_width设置成wrap_content的时候,父布局的意思是包裹view,view有多大就分配多大的空间给它,这时候view的宽度就取决于width,假如不设置width,那么系统就会根据view的内容来自行测量大小。layout_height和height是一样的。具体效果,可以写布局文件自己试一下,同时建议大家也试一下minWidth maxWidth这些属性,可以更好的帮助我们理解布局文件的原理。(参考自/u013320868/article/details/50961755