魅族Smart Bar 适配问题

来源:互联网 发布:mac圣诞购买指南 编辑:程序博客网 时间:2024/05/16 11:22

         适配问题,一直是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() {@Overridepublic 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
原创粉丝点击