`
dengbaoleng
  • 浏览: 1131631 次
文章分类
社区版块
存档分类
最新评论

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。

分享到:
评论

相关推荐

    Android LinearLayout.LayoutParams 使用方法

    1.LinearLayout.LayoutParams使用说明 2.在Java代码中利用LinearLayout.LayoutParams构建布局

    android - 交换控件(relativelayout)位置,LayoutParams与ObjectAnimator两种方法

    现需要交换两个控件(本文中是两个RelativeLayout),找到了两个方法: 1、使用LayoutParams改变两个layout的属性,即其相对关系(below等),实现位置的交换,但是并没有交换的动画效果,是“瞬间”交换。 2、使用...

    android 实现FlowLayout 流线布局(自定义ViewGroup)

    [Android开发:LayoutParams的用法](http://blog.csdn.net/double2hao/article/details/51438798) [MarginLayoutParams--一个可以在代码中直接设置margin的方法]...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    2.2 Android中的多进程模式 36 2.2.1 开启多进程模式 36 2.2.2 多进程模式的运行机制 39 2.3 IPC基础概念介绍 42 2.3.1 Serializable接口 42 2.3.2 Parcelable接口 45 2.3.3 Binder 47 2.4 Android中的IPC...

    代码动态设置view或布局的宽高

    然而这时候你一定要注意强制类型转换时的LayoutParams类型,因为android中存在3种LayoutParams,即RelativeLayout.LayoutParams、LinearLayout.LayoutParams、ViewGroup.LayoutParams,那么我们改用哪一个呢?...

    Android开发艺术探索

    而对于高级开发者来说,仍然可以从《Android开发艺术探索》的知识体系中获益。 全书目录 ------------------------------------------------------------------- 第1章 Activity的生命周期和启动模式 / 1  1.1 ...

    BiliBili-基于ijkplayer rxjava retrofit,组件化思想,实现一个仿B站的Android客户端.zip

    组件化实现方案组件化使用的方案出自张华洋的文章:Android组件化方案在gradle.properties中,有一个isModule值,为true时是组件化模式,为false为library。在业务组件的build.gradle中读取 isModule,代码如下:if...

    浅析Android Dialog中setContentView()方法

    Dialog在Android中是一个很优秀的工具。在使用Dialog时,我们一般都会自定义要显示的内容布局。Dialog自带了三个方法来支持自定义内容布局。 public void setContentView (int layoutResID); public void ...

    android 动态控制状态栏显示和隐藏的方法实例

    android想要应用运行时全屏有一种方法是在activity的onCreat方法中加入如下代码:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);并且需要在...

    Android状态栏的适配汇总

    Android 5.0 及其以后版本:设置属性 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 使得我们的内容布局可以延伸到系统状态栏,然后直接使用方法 setStatusBarColor() 把系统状态栏设置成透明就好了。 Android 4.4 ~ ...

    《Android自定义组件开发详解》

    6.4.2 读取来自style和theme中的属性 181 6.5 案例1:圆形ImageView组件 186 6.6 案例2:验证码组件CodeView 190 6.7 练习作业 202 第七章 自定义容器 204 7.1 概述 204 7.2 ViewGroup类 205 7.2.1 ViewGroup常用...

    Android中View跟随手指滑动效果的实例代码

    本文讲述了Android中View跟随手指滑动效果的实例代码。分享给大家供大家参考,具体如下: ...3、自定义中使用layout()方法实习view的滑动 public class MoveView extends View { private int lastX, lastY; public M

    Android系统永不锁屏永不休眠的方法

     一种是代码中设置, 建议使用第一种方式,这样,在安装程序的时候会进行提醒: 第一种方式: 在Manifest.xml文件里面用user-permission声明 名称为:android.permission.WAKE_LOCK 第二种方式: getWindow()....

    Android编程实现屏幕禁止休眠的方法

    实现这一功能的方法有两种,一种是在Manifest.xml文件里面声明,一种是在代码里面修改LayoutParams的标志位。具体如下: 1、在Manifest.xml文件里面用user-permission声明。代码如下: &lt;uses android:name=android....

    Android-SimpleLayout

    简单的方法是使用左上角协调来定位 android 视图。 在您的设计 UI 上使用协调,它将转换为您想要显示的大小或设备显示大小。 用法 ###Programmatically SimpleLayout layout = new SimpleLayout(getApplication());...

    Android编程设定activity进入和退出效果的方法

    设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。...

    Android编程实现悬浮窗获取并显示当前内存使用量的方法

    本文实例讲述了Android编程实现悬浮窗获取并显示当前内存使用量的方法。分享给大家供大家参考,具体如下: 运行效果: 其中: 这一块就是悬浮窗,可以随意拖动,动态显示当前内存使用量。 下面看一下代码是如何...

    Android 仿蘑菇街列表弹出和瀑布流ScrollView+RelativeLayout实现

    原理使用RelativeLayout任意定位位置 核心方法 private void addViewByMargins(RelativeLayout layout, View view, int x, int y, int width, int height) { RelativeLayout.LayoutParams layout_params = null; ...

    星座说明书

    用户:使用Android手机的用户 项目开发环境:eclipse、Android系统平台 1.3定义  Android 星座查询 详细设计说明   1.4参考资料  《Android开发入门指南》 2.程序系统的结构及其用到的类 2.1一个完整的...

Global site tag (gtag.js) - Google Analytics