`
yangzc106
  • 浏览: 154354 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义绝对布局的实现

 
阅读更多

android 绝对布局已经过期了为了保证稳定性自定义了一个绝对布局

 

package cn.kuwo.base.skin.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

public class MyAbsoluteLayout extends ViewGroup {

	private int mPaddingLeft;
	private int mPaddingRight;
	private int mPaddingTop;
	private int mPaddingBottom;

	public MyAbsoluteLayout(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public MyAbsoluteLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		mPaddingLeft = attrs
				.getAttributeIntValue(android.R.attr.paddingLeft, 0);
		mPaddingRight = attrs.getAttributeIntValue(android.R.attr.paddingRight,
				0);
		mPaddingTop = attrs.getAttributeIntValue(android.R.attr.paddingTop, 0);
		mPaddingBottom = attrs.getAttributeIntValue(
				android.R.attr.paddingBottom, 0);
	}

	public MyAbsoluteLayout(Context context) {
		super(context);
	}

	@Override
	protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
		return new MyAbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
				LayoutParams.WRAP_CONTENT, 0, 0);
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int count = getChildCount();

		int maxHeight = 0;
		int maxWidth = 0;

		measureChildren(widthMeasureSpec, heightMeasureSpec);

		for (int i = 0; i < count; i++) {
			View child = getChildAt(i);
			if (child.getVisibility() != GONE) {
				int childRight;
				int childBottom;

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

				childRight = lp.x + child.getMeasuredWidth();
				childBottom = lp.y + child.getMeasuredHeight();

				maxWidth = Math.max(maxWidth, childRight);
				maxHeight = Math.max(maxHeight, childBottom);
			}
		}

		maxWidth += mPaddingLeft + mPaddingRight;
		maxHeight += mPaddingTop + mPaddingBottom;

		maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight());
		maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth());

		setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
				resolveSize(maxHeight, heightMeasureSpec));
	}

	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b) {
		int count = getChildCount();

		for (int i = 0; i < count; i++) {
			View child = getChildAt(i);
			if (child.getVisibility() != GONE) {

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

				int childLeft = mPaddingLeft + lp.x;
				int childTop = mPaddingTop + lp.y;
				child.layout(childLeft, childTop, childLeft
						+ child.getMeasuredWidth(), childTop
						+ child.getMeasuredHeight());

			}
		}
	}

	@Override
	protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
		return p instanceof MyAbsoluteLayout.LayoutParams;
	}

	@Override
	protected ViewGroup.LayoutParams generateLayoutParams(
			ViewGroup.LayoutParams p) {
		return new MyAbsoluteLayout.LayoutParams(p);
	}

	public static class LayoutParams extends ViewGroup.LayoutParams {

		public int x;
		public int y;
		public int width;
		public int height;

		public LayoutParams(int x, int y, int width, int height) {
			super(width, height);
			this.x = x;
			this.y = y;
			this.width = width;
			this.height = height;
		}

		public LayoutParams(Context context, AttributeSet attrset) {
			super(context, attrset);
		}

		public LayoutParams(int width, int height) {
			super(width, height);
		}

		public LayoutParams(ViewGroup.LayoutParams params) {
			super(params);
		}

	}
}

 

分享到:
评论

相关推荐

    Android自定义实现图片加文字功能

    Android自定义实现图片加文字...我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层。 我写的 custom_pictext.xml &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;RelativeLayout xmlns:a

    android集成文字输入,语音输入,表情输入自定义view

    语音的发送 语音发送的时候会执行实现接口中的public void getAndSendVoice String path int time 方法path是录制的语音在本地的绝对路径 time是语音的时长 秒为单位 至于接下来是要通过网络发送出去还是播放 自己...

    jQuery实现的自定义轮播图功能详解

    本文实例讲述了jQuery实现的自定义轮播图功能。分享给大家供大家参考,具体如下: jquery实现轮播图 web网页上的首页,经常会...将wrap层相对布局,图片展示区、上一张下一张点击区、指示灯展示区层设置为绝对布局。

    自定义可全屏幕拖动的带漂浮效果的控件

    绝对物超所值,直接findById这个自定义控件就可以,无需再操作其他的。 实现的效果: 1、可以随意拖动; 2、漂浮动画无限循环播放; 3、可随意添加拖动的控件的个数,无冲突,只要在xml布局文件中把这个自定义控件...

    QT使用注意

     1) 支持绝对布局和布局管理器布局;  2) 绝对布局不够灵活、无法自动调整大小,需要手动编写代码调整;  3) 布局管理器管理布局比较灵活、可自动调整管理的其下部件大小、位置;  4) 布局管理器目前有基本布局...

    TabLayoutSummaryy:三种实现tablayout加viewpager滑动的实现总结

    三种实现TabLayout滑动布局方式总结自定义HorizontalScrollView实现TabLayout效果先放效果:**使用心得:**参考的网上的写法,以前我有几个项目就用的这种实现方式,实现代码详细,便于我们理解实现细节,并且个性化...

    Android入门到精通源代码.

    6.2.5 绝对布局(AbsoluteLayout) 6.3 界面中的字体 6.3.1 设置系统字体 6.3.2 引用用户自定义字体 6.4 应用实例详解:制作手机桌面 6.4.1 实例分析 6.4.2 实例实现 第7章 Android中的核心Intent 7.1 Intent的作用 ...

    android开发实例大全_王东华

    实例004: 使用绝对布局(AbsoluteLayout) 来布局屏幕 6 实例005: 使用标签布局(TabLayout)来 布局屏幕 8 实例006: 使用层布局(FrameLayout) 10 实例007: 创建一个桌面组件Widget 11 实例008: 在屏幕中实现...

    云应用开发 ——Google App Engine & Google Web Toolkit入门指南

    4.5 自定义按钮——PushButton,ToggleButton 4.6 文件上传——FileUpload 4.7 时间选择器——DatePicker 4.8 列表控件——ListBox 4.9 联想输入框——Suggest Box 4.10 树结构——Tree 4.11 菜单条——MenuBar 4.12...

    Android编程入门很简单.(清华出版.王勇).part2

    7.2.1使用绝对布局 7.2.2使用线性布局 7.2.3使用框架布局 7.2.4使用表格布局 7.2.5使用关系布局 7.3使用其他布局容器 7.3.1 使用TabActivity 7.3.2 自定义TabHost 7.3.3 使用对话框 7.3.4使用滑动抽屉 7.4 小结 第3...

    Android编程入门很简单.(清华出版.王勇).part1

    7.2.1使用绝对布局 7.2.2使用线性布局 7.2.3使用框架布局 7.2.4使用表格布局 7.2.5使用关系布局 7.3使用其他布局容器 7.3.1 使用TabActivity 7.3.2 自定义TabHost 7.3.3 使用对话框 7.3.4使用滑动抽屉 7.4 小结 第3...

    H5+CSS3.zip

    css布局模型:流动模型flow,浮动模型float,层模型layer,层模型的绝对定位、相对定位、固定定位,相对定位与绝对定位组合; css弹性盒模型:flex属性,横轴排列,纵轴排列,flex占比; 行内元素水平居中设置; 定...

    Eclipse_Swt_Jface_核心应用_部分19

    7.7.3 自定义布局类(BorderLayout) 119 7.8 使用VE可视化布局 123 7.8.1 创建可视化的类 123 7.8.2 进行布局设置 124 7.9 本章小结 125 第8章 SWT中的事件模型 126 8.1 事件模型概述 126 8.1.1 监听...

    Android插件框架Android-Plugin-Framework.zip

    插件程序和宿主程序共用依赖库时插件中的布局文件中使用了宿主程序中的自定义控件,而宿主程序中的自定义控件中又使用 了宿主程序中的布局文件。 插件代码中无需做任何特殊处理,即可支持这种布局文件。 8、...

    Ext Js权威指南(.zip.001

    9.8.2 在单页面应用中使用卡片布局实现“页面”切换 / 496 9.9 本章小结 / 498 第10章 重构后的grid / 500 10.1 grid的基类及其构成 / 500 10.1.1 概述 / 500 10.1.2 表格面板的运行流程:ext.panel.table / ...

    Android典型技术模块开发详解

    8.1.3 绝对布局 8.1.4 Frame布局 8.1.5 表格布局 8.2 Tab布局 8.3 ScrollView 8.4 ListView(列表) 8.4.1 继承自ListActivity 8.4.2 ListView灵活运用 8.5 GirdView(网格) 8.6 WebView(网页) 8.6.1 WebView加载...

    详解iOS App中UiTabBarController组件的基本用法

    UiTabBarController这个控制器绝对是项目架构时做常用的一个控件。...但是直接使用模板后会发现是直接在代码里实现了子布局得添加,由于我们不熟练,对于item,tabbar什么的图片文字自定义,一下子找不到代码里的ap

    ExtJSWeb应用程序开发指南(第2版)

    5.2.6 Absolute绝对位置布局 5.2.7 CheckboxGroup复选框组布局 5.2.8 Column列布局 5.2.9 Table表格布局 5.2.1 0Border边框布局 5.2.1 1Box盒布局 5.3 使用ViewPort 5.4 Ext.tab.Panel页签 5.5 本章小结 ...

    asp.net知识库

    自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务...

Global site tag (gtag.js) - Google Analytics