Android中LayoutParams的用法

简单说说 自己对 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>

Java代码 :
  1. <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>//创建一个线性布局 <wbr><wbr></wbr></wbr>
  2. <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>
  3. <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>
  4. <wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>//现在我要往mLayout里边添加一个TextView<wbr></wbr> <wbr><wbr></wbr></wbr>
  5. <wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>//你可能会想直接在布局文件里边配置不就O<wbr>了<wbr>那是<wbr>但是这里为了说明问题我们用代码实现</wbr></wbr></wbr> <wbr><wbr></wbr></wbr>
  6. <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>
  7. <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>
  8. <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>
  9. <wbr><wbr></wbr></wbr><wbr><wbr></wbr></wbr>
  10. //在xml里边怎么配置高宽大家都会的。 <wbr><wbr></wbr></wbr>
  11. <wbr><wbr></wbr></wbr>//第一个参数为宽的设置,第二个参数为高的设置。 <wbr><wbr></wbr></wbr>
  12. <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>
  13. <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>
  14. <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>
  15. <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>
  16. <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>
  17. <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>
  18. <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,如

 
   
1 LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) child.getLayoutParams();

或者是如下定义:

 
   
1 LayoutParams lp = (LayoutParams) child.getLayoutParams();

以转换成内部类型LinearLayout.LayoutParams。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android,可以使用LayoutParams动态设置控件的位置,LayoutParams是ViewGroup.LayoutParams的子类,用于设置控件在布局的位置和大小。LayoutParams可以根据控件所在的父布局类型进行选择,例如RelativeLayout.LayoutParams、LinearLayout.LayoutParams等。 以下是通过LayoutParams动态设置控件位置的示例代码: ``` // 创建一个新的TextView TextView textView = new TextView(this); textView.setText("Hello World!"); // 创建一个RelativeLayout.LayoutParams对象,设置宽度和高度为WRAP_CONTENT RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); // 设置TextView的左上角对齐父布局的左上角 layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // 设置TextView的位置 layoutParams.topMargin = 50; layoutParams.leftMargin = 50; // 将LayoutParams设置给TextView textView.setLayoutParams(layoutParams); // 将TextView添加到父布局 RelativeLayout relativeLayout = findViewById(R.id.relativeLayout); relativeLayout.addView(textView); ``` 在上述代码,首先创建了一个新的TextView,然后创建了一个RelativeLayout.LayoutParams对象,并设置了TextView的宽度和高度为WRAP_CONTENT。接着,通过addRule方法设置TextView的左上角对齐父布局的左上角,再通过topMargin和leftMargin设置TextView的位置。最后,将LayoutParams设置给TextView,并将TextView添加到父布局。 总之,使用LayoutParams可以方便地动态设置控件的位置和大小,开发者可以根据实际需求选择不同的LayoutParams类型,并根据需要设置控件的位置和大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值