- 浏览: 596043 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
onLayout方法是ViewGroup中子View的布局方法,用于放置子View的位置。放置子View很简单,只需在重写onLayout方法,然后获取子View的实例,调用子View的layout方法实现布局。在实际开发中,一般要配合onMeasure测量方法一起使用。
参数的含义如下图:
该方法在ViewGroup中定义是抽象函数,继承该类必须实现onLayout方法,而ViewGroup的onMeasure并非必须重写的。View的放置都是根据一个矩形空间放置的,onLayout传下来的l,t,r,b分别是放置父控件的矩形可用空间(除去margin和padding的空间)的左上角的left、top以及右下角right、bottom值。
layout方法:
该方法是View的放置方法,在View类实现。调用该方法需要传入放置View的矩形空间左上角left、top值和右下角right、bottom值。这四个值是相对于父控件而言的。例如传入的是(10, 10, 100, 100),则该View在距离父控件的左上角位置(10, 10)处显示,显示的大小是宽高是90(参数r,b是相对左上角的),这有点像绝对布局。
平常开发所用到RelativeLayout、LinearLayout、FrameLayout...这些都是继承ViewGroup的布局。这些布局的实现都是通过都实现ViewGroup的onLayout方法,只是实现方法不一样而已。
下面是一个自定义ViewGroup的Demo,用onLayout和layout实现子View的水平放置,间隔是20px
Activity的XML布局:
效果如图所示:
上图MyViewGroup是蓝色,两个子View分别为红色和绿色。
在自定义View中,onLayout配合onMeasure方法一起使用,可以实现自定义View的复杂布局。自定义View首先调用onMeasure进行测量,然后调用onLayout方法,动态获取子View和子View的测量大小,然后进行layout布局。
@Override protected abstract void onLayout(boolean changed, int l, int t, int r, int b);
参数的含义如下图:
该方法在ViewGroup中定义是抽象函数,继承该类必须实现onLayout方法,而ViewGroup的onMeasure并非必须重写的。View的放置都是根据一个矩形空间放置的,onLayout传下来的l,t,r,b分别是放置父控件的矩形可用空间(除去margin和padding的空间)的左上角的left、top以及右下角right、bottom值。
layout方法:
public void layout(int l, int t, int r, int b);
该方法是View的放置方法,在View类实现。调用该方法需要传入放置View的矩形空间左上角left、top值和右下角right、bottom值。这四个值是相对于父控件而言的。例如传入的是(10, 10, 100, 100),则该View在距离父控件的左上角位置(10, 10)处显示,显示的大小是宽高是90(参数r,b是相对左上角的),这有点像绝对布局。
平常开发所用到RelativeLayout、LinearLayout、FrameLayout...这些都是继承ViewGroup的布局。这些布局的实现都是通过都实现ViewGroup的onLayout方法,只是实现方法不一样而已。
下面是一个自定义ViewGroup的Demo,用onLayout和layout实现子View的水平放置,间隔是20px
public class MyViewGroup extends ViewGroup { // 子View的水平间隔 private final static int padding = 20; public MyViewGroup(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO Auto-generated method stub // 动态获取子View实例 for (int i = 0, size = getChildCount(); i < size; i++) { View view = getChildAt(i); // 放置子View,宽高都是100 view.layout(l, t, l + 100, t + 100); l += 100 + padding; } } }
Activity的XML布局:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp"> <com.example.layout.myviewgroup android:layout_width="match_parent" android:layout_height="100dp" android:background="#0000ff"> <view android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff0000"> <view android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ff00"> </view></view></com.example.layout.myviewgroup> </relativelayout>
效果如图所示:
上图MyViewGroup是蓝色,两个子View分别为红色和绿色。
在自定义View中,onLayout配合onMeasure方法一起使用,可以实现自定义View的复杂布局。自定义View首先调用onMeasure进行测量,然后调用onLayout方法,动态获取子View和子View的测量大小,然后进行layout布局。
发表评论
文章已被作者锁定,不允许评论。
-
android BaseActivity与BaseFragment的封装
2016-05-19 15:06 10141 概述 多模块Activity+多Fragment 是开发 ... -
android ScrollView常用属性
2016-05-09 09:17 714android:scrollbars 设置滚动条显示。none ... -
android RecyclerView使用及详解
2016-05-04 10:35 29051.前言 话说RecyclerView已经面市很久,也在很多 ... -
android DialogFragment 创建对话框(官方推荐)
2016-04-29 14:22 9141、 概述 DialogFragment在android 3. ... -
android Intent Flags及Task相关属性
2016-04-26 09:15 626task是一个具有栈结构的容器,可以放置多个Activity实 ... -
android SQLite具体实例应用详解(SQLiteOpenHelper)
2016-04-18 19:24 822上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们 ... -
android SQLite3常用命令&语法
2016-04-18 19:01 624sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常 ... -
android View绘制相关问题总结
2016-03-28 19:27 6901.View的绘制流程分几步 ... -
android Handler Looper MessageQueue机制的原理
2016-03-22 21:09 773andriod提供了Handler和Looper来满足线程间的 ... -
android Bitmap,BitmapFactory类图像处理
2016-03-16 16:28 2375BitMap代表一张位图,扩展名可以是.bmp或者.dib。 ... -
android 三类菜单(Option) (Context) (SubMenu)学习
2016-03-14 15:23 929在Android系统中,菜单可以分为三类:选项菜单(Optio ... -
android Sqlite数据库对象模型ORMLite框架学习
2016-03-11 15:24 715在Android项目中或多或少的都会使用数据库,为了提高我们的 ... -
android AsyncTask<参数,进度值类型,返回类型>学习
2016-03-10 14:45 1191AsyncTask和Handler对比 1 ... -
android 远程图片获取和本地缓存
2016-03-10 14:32 785概述 对于客户端——服 ... -
android onSaveInstanceState和onRestoreInstanceState学习
2016-03-10 10:08 806Android中的activity通过onSaveInst ... -
android Fragment生命周期和回退栈学习以及Fragment之间通信
2016-03-10 09:31 1538会涉及到Fragment如何产生,什么是Fragment,Fr ... -
android LruCache内存缓存学习(重写sizeOf方法)
2016-03-09 19:25 1069什么是缓存? 缓存技术原理就是把用户访问的所有对象看作一个全 ... -
android ListView中的convertView缓存及使用
2016-03-09 19:12 1716一、复用convertView 首先讲下ListView的原 ... -
android 从资源角度谈Android代码内存优化
2016-03-09 18:54 726开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么 ... -
android startActivityForResult和setResult详情及Demo
2016-03-09 08:56 1057startActivityForResult与startAct ...
相关推荐
本篇文章将深入探讨如何在Android中进行自定义Layout布局的开发。 首先,创建自定义Layout首先要创建一个新的Java类,继承自`ViewGroup`或`LinearLayout`等现有布局。选择`ViewGroup`是因为它是所有布局的基础类,...
在Android开发中,FloatLayout可能是一个自定义布局,它扩展了Android的基础布局系统,提供了更灵活的元素定位方式。这个压缩包"Android FloatLayout的简单使用.zip"包含了关于如何使用FloatLayout的相关资料,让...
通过阅读LinearLayout或RelativeLayout的源码,可以学习它们如何遍历并定位子View,这有助于自定义Layout时参考和借鉴。 此外,利用工具如Android Studio的Layout Inspector可以直观地查看运行时布局的层级结构和...
通过学习和理解`ViewGroup`的`onLayout()`方法,开发者可以自定义布局行为,实现各种创新的界面交互效果。这不仅需要对Android布局机制有深入理解,还需要熟练运用`源码`和相关`工具`进行调试和优化。在实际开发中,...
在Android开发中,动态加载布局(Dynamic Layout)是一种常见的需求,它允许应用程序在运行时根据用户行为或特定条件改变UI布局。Android系统提供了一些机制来实现这种灵活性,其中包括使用LayoutInflater、ViewStub...
Android 重写ViewGroup 中onMeasure()和onLayout()方法详解 Android 中的 ViewGroup 是一个抽象类,继承自 View,提供了基本的布局管理功能。为了提供更好的自定义布局,需要重写 ViewGroup 中的两个重要方法:...
标题中的"android自定义实现比例缩放的layout"指的是创建一个自定义的Android布局类,它能够根据不同的屏幕尺寸和密度自动调整其子视图的大小,以保持内容的比例一致。这样的布局有助于确保用户在大屏或小屏设备上都...
oid:layout_height="45dp" android:background="@color/green"> <Button android:id="@+id/title_bar_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_...
接下来,我们需要创建一个自定义View类,继承自ViewGroup,并重写onLayout()方法以正确地布置子视图。同时,我们需要监听两个Button的点击事件,以处理数值的增加和减少: ```java public class AddAndSubtractView...
2. **Layout**:代表onLayout方法的执行情况。 3. **Draw**:代表onDraw方法的执行情况。 颜色的不同代表着性能的差异: - **绿色**:表示该View的该项性能优于该View Tree中超过50%的View。 - **黄色**:表示该...
`CircleLayout`的核心在于重写`onLayout()`方法,此方法负责确定每个子视图的位置。在`onLayout()`中,我们需要计算出每个子视图相对于中心点的坐标,以实现圆形排列。 ```java public class CircleLayout extends ...
在这里就用简单的流式布局来介绍一下onLayout()方法。 在onLayout方法中有四个参数,我画了一个简单的图来分清楚值哪里。 好啦,现在就直接看代码吧。 FlowLayout.Java package com.example.my_view; ...
开发者需要了解如何创建自定义View类,继承自ViewGroup,并重写onMeasure()、onLayout()和onTouchEvent()等方法来控制布局和触摸事件处理。 3. **图片加载库**: 为了加载网络图片,项目可能使用了如Glide、...
在onLayout()方法中处理子视图的位置,然后在onDraw()方法中绘制滚动效果。 5. 注意事项:在实际开发中,需要考虑性能和用户体验。确保滚动流畅,避免过度绘制,同时考虑不同设备的屏幕尺寸和方向。 综上所述,...
- **自定义ViewGroup**:如果需要更定制化的动画效果,可以通过继承`ViewGroup`并重写其`onLayout()`和`onDraw()`方法,实现自定义的绘制逻辑,配合`postInvalidate()`触发重绘以实现动画效果。 - **使用Lottie**...
在这个类中,我们需要重写`onMeasure()`和`onLayout()`方法来确定每个子View的位置。同时,我们需要为添加、删除和选择标签提供接口。 ```java public class TagView extends ViewGroup { private List<TagItem> ...
本示例“ex07_layout.rar”提供了Android应用中使用不同类型的Layout进行编程和方法的实例演示。通过这个压缩包,开发者可以深入理解如何有效地管理UI元素并创建动态、响应式的用户界面。 1. **线性布局...
在Android开发中,自定义`Layout`是一种常见的需求,它能帮助我们实现独特且复杂的界面设计,超越系统预设的视图容器。本教程将详细讲解如何在Android中创建一个自定义的`ViewGroup`,实现等分格子布局,即`...
标题提到的“android 自动换行layout”是指一种能够根据屏幕宽度自动将子视图换行显示的LinearLayout实现。这种功能通常用于创建网格或列表,例如商品展示、菜单选项等场景。下面我们将详细探讨如何自定义一个自动...
`view-measrue/layout学习`的主题涵盖了Android UI系统的基础知识,主要包括以下几个方面: 1. **View**: Android中的View是最基本的UI元素,它可以是按钮、文本框、图片等。每个View都有自己的绘制和事件处理能力...