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

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 使用方法

    在这个主题中,我们将深入探讨如何使用LinearLayout.LayoutParams以及在Java代码中构建布局的方法。 1. **LinearLayout.LayoutParams的基本属性** - `android:layout_width`:定义子视图的宽度,可设置为`wrap_...

    Android_surfaceView与layout屏幕适配总结

    在Android应用开发中,屏幕适配是一个至关重要的环节,尤其对于拥有众多不同尺寸和分辨率设备的Android生态系统来说。本篇文章将深入探讨`SurfaceView`与`layout`在屏幕适配中的应用及其策略。 首先,`SurfaceView`...

    Android dialog显示位置

    在Android开发中,Dialog是一种非常常见的用户界面组件,它用于向用户展示临时信息或进行简单的交互操作。对话框通常会浮现在应用主界面之上,但它的显示位置可以根据开发者的需求进行定制。本文将深入探讨如何在...

    Android中如何禁止屏幕休眠和锁屏

    在 onPause 方法中,我们释放锁,恢复系统的锁屏功能。 方法三:禁用系统的锁频功能 第三种方法是禁用系统的锁频功能。这种方法需要在 AndroidManifest.xml 文件中添加以下代码: &lt;uses-permission android:name=...

    Android中使用自定义ViewGroup的总结

    在实际应用中,你可能还需要在onMeasure()和onLayout()方法中使用这个属性来调整Child View的大小。例如,在onMeasure()中,你可以根据`inner_percent`来计算Child View的尺寸,而在onLayout()中,根据计算结果设置...

    android 采用windowmanager屏蔽home键

    在Android系统中,Home键是默认行为,允许用户随时返回主屏幕或切换到其他应用程序。然而,有时开发者可能需要在特定场景下禁用Home键,例如在全屏游戏或者某个重要操作过程中,确保用户不会意外退出。这通常通过`...

    Android使用协调布局CoordinatorLayout的代码例子

    Android使用协调布局CoordinatorLayout的代码例子。用于演示CoordinatorLayout的基本用法,以及悬浮按钮FloatingActionButton、底部弹窗BottomSheetBehavior的使用方法。

    Android View的六种移动方式

    在Android开发中,自定义View是一项常见的任务,它允许开发者根据特定需求创建独特的用户界面元素。本文将深入探讨“Android View...项目中的代码示例将有助于更好地掌握每个方法的用法,以及它们在实际场景中的表现。

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

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

    Android 设置最小宽高

    综上所述,Android中可以通过多种方式来设置控件的最小宽高,包括使用`LayoutParams`,调用`View`类的`setMinWidth`和`setMinHeight`方法,以及在XML布局文件中直接设置属性。理解并灵活运用这些方法,可以帮助...

    Android 显示/隐藏 布局

    本主题聚焦于如何在Android应用中不使用`visibility`属性来显示或隐藏布局。`visibility`属性虽然常见,但有时开发者可能需要更灵活的控制方式。以下是一些替代方法及其详细解释: 1. **使用ViewStub**: `ViewStub`...

    Android基础教程(六)之-Android中两种设置全屏的方法!!!

    为了实现全屏显示,首先需要在对应的Activity类中覆盖`onCreate()`方法,并在此方法中添加以下代码: 1. **移除标题栏**:调用`requestWindowFeature(Window.FEATURE_NO_TITLE);`来移除标题栏。这是因为默认情况下...

    android 程序中动态添加删除控件或布局

    - **使用LayoutInflater**:Android提供了LayoutInflater服务,可以将XML布局文件中的视图转换为运行时的对象。首先,我们需要通过`getSystemService()`方法获取LayoutInflater实例,然后调用`inflate()`方法加载...

    android在dialog中显示二维码

    要实现在Dialog外部点击时关闭Dialog,可以在Dialog的`onCreate()`方法中设置监听器: ```java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle...

    Android DatePicker,NumPicker解析(分割线颜色及调整大小)

    此外,如果你希望动态地改变`NumPicker`的大小,可以在Java代码中使用`LayoutParams`: ```java NumPicker numPicker = findViewById(R.id.num_picker); ViewGroup.LayoutParams layoutParams = numPicker....

    Android中两种设置全屏的方法!!!借鉴.pdf

    首先,我们需要创建一个新的Activity,并在`onCreate()`方法中进行全屏设置。下面是一个示例代码: ```java package com.android.tutor; import android.app.Activity; import android.os.Bundle; import android....

    android 软键盘弹出相关的坑之解决方法

    在Activity的`onApplyWindowInsets()`方法中,可以获取到软键盘的状态,并根据需要调整布局。 **4. 软键盘关闭问题** 用户可能希望点击屏幕任意位置关闭键盘。这可以通过监听触摸事件并在`MotionEvent.ACTION_DOWN`...

    android实现悬浮窗功能,无需权限

    本文将详细讲解如何在Android系统4.4(API Level 19)及以上版本实现这样的功能,主要涉及的技术点是使用`TYPE_TOAST`窗口类型。 首先,我们需要了解Android中的窗口类型。在Android中,每个应用都运行在一个独立的...

    Android Dialog更改样式及显示位置

    在Android开发中,Dialog是一种常见的用户交互界面,用于在主线程中显示临时信息或进行简单的用户操作。默认情况下,Dialog会出现在屏幕中央,但开发者可以根据需求自定义其样式和显示位置。本文将深入探讨如何在...

    android中点中overlay弹出带尾巴的气泡的实现

    在Android应用开发中,为了提供更丰富的用户体验,开发者经常会遇到需要为地图应用中的特定位置添加带有提示信息的功能需求。其中一种常见的方式就是在点击地图上的某一点(即overlay)时弹出一个带有“尾巴”的提示...

Global site tag (gtag.js) - Google Analytics