android 平板的action bar、status bar、navigation bar的高度

之前开发时一直在用getWidth()、getHeight()方法取屏幕的分辨率,在平板上也这么在用。

后来发现在getHeight()取得的分辨率与 平板中的分辨率不一样。于是进行了一些实验。

平板的分辨率截图:


测试代码得到的log打印输出:


根据以上一些信息基本就可以得到几个bar的大致位置,草图如下:


这样就比较明显了 系统的分辨率 1024 = screentHeight+navigatiobar = 976+48;

也就是说 平时说的最多的screenHeight其实是包含3部分的  statusBar 、actionbar、以及中间的布局部分 layoutHeight 

一些代码片段:

 ScreenHeight:

<span style="white-space:pre">		</span>//api13之前    
		WindowManager windowManager = getWindowManager();    
		Display display = windowManager.getDefaultDisplay();    
		screenWidth13 = display.getWidth();    
		screenHeight13 = display.getHeight(); 
		
		Log.e("screenWidth13", screenWidth13+"");
		Log.e("screenHeight13", screenHeight13+"");
		
		//api13之后
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);

		screenWidth = dm.widthPixels;
		screenHeight = dm.heightPixels;
		
		Log.e("screenWidth", screenWidth+"");
		Log.e("screenHeight", screenHeight+"");

StatusBarHeight:

<span style="white-space:pre">	</span>public int getStatusBarHeight() { 
	      int result = 0;
	      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
	      if (resourceId > 0) {
	          result = getResources().getDimensionPixelSize(resourceId);
	      } 
	      return result;
	} 
ActionBarHeight
<span style="white-space:pre">		</span>TypedValue tv = new TypedValue();
		if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
		{
		    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
		}
		Log.e("actionBarHeight", actionBarHeight+"");
navigationBarHeight:

<span style="white-space:pre">	</span>public int getNavigationBarheight(){
		Resources resources = this.getResources();
		int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
		if (resourceId > 0) {
		    return resources.getDimensionPixelSize(resourceId);
		}
		return 0;
	}
layoutHeight:

<span style="white-space:pre">		</span>final LinearLayout lineLayout  = (LinearLayout)this.findViewById(R.id.layout);
		ViewTreeObserver vto = lineLayout.getViewTreeObserver(); 
		vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
			
			@Override
			public boolean onPreDraw() {

				int layoutWidth = lineLayout.getWidth();
				int layoutHeight = lineLayout.getHeight();
				
				Log.e("layoutWidth",layoutWidth+"");
				Log.e("layoutHeight",layoutHeight+"");
				return true;
			}
		});


详细内容见代码:代码链接








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值