简单说说 自己对 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,即包裹住组件就好。
在继承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。
分享到:
相关推荐
1.LinearLayout.LayoutParams使用说明 2.在Java代码中利用LinearLayout.LayoutParams构建布局
现需要交换两个控件(本文中是两个RelativeLayout),找到了两个方法: 1、使用LayoutParams改变两个layout的属性,即其相对关系(below等),实现位置的交换,但是并没有交换的动画效果,是“瞬间”交换。 2、使用...
[Android开发:LayoutParams的用法](http://blog.csdn.net/double2hao/article/details/51438798) [MarginLayoutParams--一个可以在代码中直接设置margin的方法]...
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...
然而这时候你一定要注意强制类型转换时的LayoutParams类型,因为android中存在3种LayoutParams,即RelativeLayout.LayoutParams、LinearLayout.LayoutParams、ViewGroup.LayoutParams,那么我们改用哪一个呢?...
而对于高级开发者来说,仍然可以从《Android开发艺术探索》的知识体系中获益。 全书目录 ------------------------------------------------------------------- 第1章 Activity的生命周期和启动模式 / 1 1.1 ...
组件化实现方案组件化使用的方案出自张华洋的文章:Android组件化方案在gradle.properties中,有一个isModule值,为true时是组件化模式,为false为library。在业务组件的build.gradle中读取 isModule,代码如下:if...
Dialog在Android中是一个很优秀的工具。在使用Dialog时,我们一般都会自定义要显示的内容布局。Dialog自带了三个方法来支持自定义内容布局。 public void setContentView (int layoutResID); public void ...
android想要应用运行时全屏有一种方法是在activity的onCreat方法中加入如下代码:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);并且需要在...
Android 5.0 及其以后版本:设置属性 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 使得我们的内容布局可以延伸到系统状态栏,然后直接使用方法 setStatusBarColor() 把系统状态栏设置成透明就好了。 Android 4.4 ~ ...
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跟随手指滑动效果的实例代码。分享给大家供大家参考,具体如下: ...3、自定义中使用layout()方法实习view的滑动 public class MoveView extends View { private int lastX, lastY; public M
一种是代码中设置, 建议使用第一种方式,这样,在安装程序的时候会进行提醒: 第一种方式: 在Manifest.xml文件里面用user-permission声明 名称为:android.permission.WAKE_LOCK 第二种方式: getWindow()....
实现这一功能的方法有两种,一种是在Manifest.xml文件里面声明,一种是在代码里面修改LayoutParams的标志位。具体如下: 1、在Manifest.xml文件里面用user-permission声明。代码如下: <uses android:name=android....
简单的方法是使用左上角协调来定位 android 视图。 在您的设计 UI 上使用协调,它将转换为您想要显示的大小或设备显示大小。 用法 ###Programmatically SimpleLayout layout = new SimpleLayout(getApplication());...
设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。...
本文实例讲述了Android编程实现悬浮窗获取并显示当前内存使用量的方法。分享给大家供大家参考,具体如下: 运行效果: 其中: 这一块就是悬浮窗,可以随意拖动,动态显示当前内存使用量。 下面看一下代码是如何...
原理使用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一个完整的...