简单说说 自己对 android LayoutParams的理解吧,xh写不出高级文章是低级写手。
public static class
ViewGroup.LayoutParams
extends Object
java.lang.Object
<wbr><wbr> ↳ android.view.ViewGroup.LayoutParams<wbr><wbr> //继承关系<br><br> 以下说明摘自官方文档E文好的可以看看<br> Class Overview<br><br> LayoutParams are used by views to tell their parents how they want to be laid out. See ViewGroup Layout Attributes for a list of all child view attributes that this class supports.<br><br> The base LayoutParams class just describes how big the view wants to be for both width and height. For each dimension, it can specify one of:<br><br> FILL_PARENT (renamed MATCH_PARENT in API Level 8 and higher), which means that the view wants to be as big as its parent (minus padding)<br> WRAP_CONTENT, which means that the view wants to be just big enough to enclose its content (plus padding)<br> an exact number<br> There are subclasses of LayoutParams for different subclasses of ViewGroup. For example, AbsoluteLayout has its own subclass of LayoutParams which adds an X and Y value.<br><br> E文不好看不懂<wbr> 但是觉得写得啰嗦了<br> 其实这个LayoutParams类是用于child view(子视图) 向 parent view(父视图)传达自己的意愿的一个东西(孩子想变成什么样向其父亲说明)其实子视图父视图可以简单理解成<br> 一个LinearLayout 和 这个LinearLayout里边一个 TextView 的关系 TextView 就算LinearLayout的子视图 child view 。需要注意的是LayoutParams只是ViewGroup的一个内部类这里边这个也就是ViewGroup里边这个LayoutParams类是 base class 基类实际上每个不同的ViewGroup都有自己的LayoutParams子类<br> 比如LinearLayout 也有自己的 LayoutParams 大家打开源码看几眼就知道了<br> myeclipse 怎么查看源码 请看<a href="http://byandby.iteye.com/blog/814277" target="_blank"><span style="color:#000000">http://byandby.iteye.com/blog/814277</span></a><br> 下边来个例子</wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>//创建一个线性布局 <wbr><wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>private<wbr>LinearLayout<wbr>mLayout;<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr>mLayout<wbr>=<wbr>(LinearLayout)<wbr>findViewById(R.id.layout);<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>//现在我要往mLayout里边添加一个TextView<wbr></wbr> <wbr><wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>//你可能会想直接在布局文件里边配置不就O<wbr>了<wbr>那是<wbr>但是这里为了说明问题我们用代码实现</wbr></wbr></wbr> <wbr><wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr>TextView<wbr>textView<wbr>=<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>new<wbr>TextView(Activity01.</wbr>this);<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>textView.setText(</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>"Text<wbr>View<wbr>"</wbr></wbr><wbr>); <wbr><wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>//这里请不要困惑这里是设置<wbr>这个textView的布局<wbr>FILL_PARENT<wbr>WRAP_CONTENT<wbr>和在xml文件里边设置是一样的如</wbr></wbr></wbr></wbr> <wbr><wbr></wbr></wbr>
- <wbr><wbr></wbr></wbr><wbr><wbr></wbr></wbr>
- //在xml里边怎么配置高宽大家都会的。 <wbr><wbr></wbr></wbr>
- <wbr><wbr></wbr></wbr>//第一个参数为宽的设置,第二个参数为高的设置。 <wbr><wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>LinearLayout.LayoutParams<wbr>p<wbr>=<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>new<wbr>LinearLayout.LayoutParams(<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>LinearLayout.LayoutParams.FILL_PARENT,<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>LinearLayout.LayoutParams.WRAP_CONTENT<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>);<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>//调用addView()方法增加一个TextView到线性布局中 <wbr><wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>mLayout.addView(textView,<wbr>p);<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
- <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>//比较简单的一个例子<wbr><wbr></wbr></wbr>
如果还不能理解下边在来一段直白的说明:
LayoutParams继承于Android.View.ViewGroup.LayoutParams.
LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。
可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每个棋子都有一个位置的信息,如这个棋子在4行4列,这里的“4行4列”就是棋子的LayoutParams。
但LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
1,一个确定的值;
2,FILL_PARENT,即填满(和父容器一样大小);
3,WRAP_CONTENT,即包裹住组件就好。
关于setLayoutParams报错
在继承BaseAdapter的时候,用getView返回View的时候,用代码控制布局,需要用到View.setLayoutParams,但是报错了,报的是类型转换错误,经过研究,发现,这里不能使用ViewGroup.LayoutParams而必须使用对应父View的LayoutParams类型。如:某View被LinearLayout包含,则该View的setLayoutParams参数类型必须是LinearLayout.LayoutParams。原因在于LinearLayout(或其他继承自ViewGroup的layout,如:RelativeLayout)在进行递归布局的时候,LinearLayout会获取子View的LayoutParams,并强制转换成LinearLayout.LayoutParams,如
或者是如下定义:
以转换成内部类型LinearLayout.LayoutParams。