魅族Smart Bar 适配问题

         适配问题,一直是android 开发的一个头疼的事情,常用的方法其实有几种,

      1,、在xml 中定义dimen,定义几种分辨率的尺寸,以适应不同分辨率的手机。

      2,在代码中oncreate 时候进行对尺寸再次设定,根据屏幕的实际高度宽度等进行二次设定。

      3,最近流行的一个新的,在xml中按照比例的设定,不过个人感觉好不算完善,复杂的布局,不太好用。

      对于这几种适配,暂时不展开,以后有时间可以展开聊聊。

 

      工作中,在适配时候,发现了一个棘手的问题,那就是魅族的smart bar,smart bar 说白了就是一个虚拟的按键,不过奇怪的是,这个smart bar 在acivity创建的时候,竟然是不包括在屏幕尺寸中的,到时一个问题就是,创建了activity 的时候,如果在屏幕的最底部有显示的话,会被这个smart bar 给盖住,虽然我们很少把控件放在最下面,但是又些时候还是要把一些东西放最下面。但是smart bar盖住了最下面,这些在最下面的显示可能看不到了,控件不能点击了,这是个问题。虽然这个使用的受众不算多,不过也不可忽视。

     说多了,其实有办法可以解决这个问题,不过使用的是上面中2提到的适配办法。

     解决办法,就是在创建完成屏幕的View的时候,对activity的整体尺寸重新设定,来解决这个适配问题,虽然这个是魅族本身的问题,但是作为开发者,要对这些不能改变的情况进行必要的自我修复。

    好,下面来一段相关适配的代码:

   private void layoutListener() {
	   final LinearLayout layout = (LinearLayout) findViewById(R.id.lly_login_layout);
	   ViewTreeObserver viewTreeObserver = layout.getViewTreeObserver();
	   viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
		@Override
		public void onGlobalLayout() {
			Rect r = new Rect();
			layout.getWindowVisibleDisplayFrame(r);
			
			int width = getResources().getDisplayMetrics().widthPixels;
			int height = getResources().getDisplayMetrics().heightPixels;
			if (height > r.bottom) {
				widthPixels =  width;
				heightPixels = r.bottom;
				initSize();
			}
			//防止多次触发
			layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
		}
	});
	}

在 onCreate时候添加这段监听,监听整个布局的布局变化,这个时候可以得到布局的尺寸,是真实的尺寸,如果这个尺寸大于了 你布局的尺寸,需要重新对布局的尺寸进行设置,以防smar bar 遮住屏幕的显示。

这样亡羊补牢,也实在是没办法,而原配的android系统的虚拟键,是不需要多此一举的。希望魅族能优化改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值