文档章节

获取Android控件尺寸

CrazyManDF
 CrazyManDF
发布于 2016/06/14 15:33
字数 224
阅读 18
收藏 0

获取系统的高度和宽度

    /**
 * 获取显示屏幕的高度
 * @return
 */
private int getScreenHeight() {
	WindowManager windowManager = mainActivity.getWindowManager();
	Display display = windowManager.getDefaultDisplay();

	Point point = new Point();
	display.getSize(point);
	int SCREEN_WIDTH = point.x;
	int SCREEN_HEIGHT = point.y;

	// 或者
	DisplayMetrics dm = new DisplayMetrics();
	display.getMetrics(dm);
	int SCREEN_WIDTH = dm.widthPixels;
	int SCREEN_HEIGHT = dm.heightPixels;

	return SCREEN_HEIGHT;
}

/**
 * 获取顶部status bar高度
 * @return
 */
private int getStatusBarHeight() {
	Resources resources = mContext.getResources();
	int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");
	int height = resources.getDimensionPixelSize(resourceId);
	return height;
}

/**
 * 获取底部 navigation bar 高度
 * @return
 */
private int getNavigationBarHeight() {
	Resources resources = mActivity.getResources();
	int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
	int height = resources.getDimensionPixelSize(resourceId);
	return height;
}

获取控件的高度和宽度

1)安装布局监听器

mView.getViewTreeObserver().addOnGlobalLayoutListener(
	new OnGlobalLayoutListener() {
		@Override
		public void onGlobalLayout(){                                             
			mViewHeight = mView.getHeight();
			//OnGlobalLayoutListener可能会被多次触发,所以注销掉
			mView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
		}
});

2)view的UI线程

mView.post(new Runnable() {
	@Override
	public void run() {
		mViewHeight = mView.getMeasuredWidth());
		}
	}
);

3)重写Activity的方法

@Override
public void onWindowFocusChanged(boolean hasFocus) {
	super.onWindowFocusChanged(hasFocus);
	int[] location = new int[2];
	mView.getLocationOnScreen(location);
	mViewHeight = location[1];
}

系统调用顺序为

Activity.oncreate()→Activity.onResume()→
→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→
→Activity.onWidnowFocusChanged()→.....→
→TextImageView.onDraw()

© 著作权归作者所有

共有 人打赏支持
CrazyManDF
粉丝 3
博文 76
码字总数 28526
作品 0
程序员
Android高效显示图片详解(一)

前提与解释: 安卓平台作为一款移动端的应用操作平台,其内存容量是十分有限的,内存资源是十分珍贵的,是无法与传统的桌面平台相比的,因此,在安卓平台下同样的图片操作与处理都要十分谨慎...

openorz
2014/02/11
0
0
android屏幕自适应4方法案例整合

android:屏幕自适应 From:4种必须知道的Android屏幕自适应解决方案(求投票支持) demo下载:http://www.eoeandroid.com/forum.php?mod=attachment&aid=NjE0Njh8ZTIyZDA2M2N8MTMzODgyOTQx...

liuher
2014/07/22
0
0
Android屏幕自适应的四种方法

android:屏幕自适应 From:4种必须知道的Android屏幕自适应解决方案 demo下载:http://www.eoeandroid.com/forum.php?mod=attachment&aid=NjE0Njh8ZTIyZDA2M2N8MTMzODgyOTQxN3w1NzAwOTV8MT......

顶层设计
2012/11/15
0
0
Android中Fragment的使用

Fragment可能是我心中一直以来的执念,由于Android开发并没有像一般流程一样系统的学习,而是直接在公司项目中改bug开始的。当时正是Fragment被提出来的时候,那时把全部精力放到了梳理代码业...

votzone
07/11
0
0
Android技能树 — 屏幕适配总结

前言: 关于屏幕适配,几乎每隔一段时间就会看见有人发出来说XXX方案,实现超级简单的适配方式等等。所以我把我目前了解过的常用的适配方案做个总结,并简单说说原理,从而让大家也初步了解各...

青蛙要fly
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

7 个致命的 Linux 命令

导读 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避...

问题终结者
今天
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
今天
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
今天
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
今天
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部