android操作系统是当前国内最流行的三个移动 操作系统之一。然后作为android开发者,我们有的时候会被这个谷歌的开源操作系统的碎片化问题弄很头大。

         什么android操作系统的碎片化问题呢?百度百科上说,碎片化就是关于整个android平台的差异越来越大。其实现在看来,iOS开发的人似乎很幸福。苹果公司把整个生态圈子都牢牢控制,所以苹果的碎片化问题真的不严重。

         android系统的碎片化问题在什么地方体现的呢?

         1.设备品牌的碎片化

          2013年:支持Android的机型为11868种
         2014年:支持Android的机型为18796种,其中,三星设备的占比为43%。简而言之,支持Android的机型越来越多(形态、尺寸、性能规格各异),而Android的不同版本又加剧了分化,Android的碎片化程度越来越高。对于开发者来说app的开发更加困难了。相比苹果而言,那就简直是,没有什么碎片化的问题可言。最多说iPhone6 plus比iphone5s等之前的产品的屏幕,分辨率等都不同。
         2.操作系统碎片化:

         android系统的更新版本还是很快(相对比苹果而言),

       
        
           这张图是2014年的报告,2014年,andorid 4.4的普及程度还没有过30%(现在4.4的系统好像超过一半的使用量),android系统的用户一般集中在2.0和4.0的系统的用户是最多的。然而,这些问题依然会带来一些问题,比如日历组件,android 2.0 的系统并不支持。再比如android 2.3 系统的 网络部分的httpconnection存在问题,只能用Httpclient开发网络。

            3.屏幕碎片化:

             我们都知道,在android系统的前端组件中,经常以dp这个单位来代表px,很多书上都说这个可以解决碎片化问题。其实不然,dp这个单位确实解决碎片哈问题,但是这是在显示分辨率(dpi)相差不大的情况下实现的。现在,android设备的屏幕分辨率简直是参差不一。比如,50dp在160dpi上确实只有50px,但是要是在现在的高分辨率的手机上,可能有150dp。如果我们用这种方式去衡量界面组件的宽高,距离等,势必会出现问题。

          以上就是android碎片化的表现(或者叫做原因)

           接下来说下我们怎么尽量避免这些问题(一下都是我平时在项目中碰到的问题)

            1.XML父节点多使用relativelayout(做好大致组件的大致布局)

            线性布局使我们在android使用的最多的布局。但是,线性布局的某些属性在碎片化严重的情况下,适配问题会很糟糕:比如layout_marginRight,layout_marginLeft这些属性,在我们的开发中,通过调试,适配了我们自己的设备,但是,在其它设备中,可能这样的属性显得不合适。比如,要体现相对关系,我们需要先把每个组件的哪些在哪些位置放好了,然后再用线性布局,来划分同一些细小的距离,比如:同父布局的边距的距离,需要在中间偏右一点的位置。这时候,我们就可以使用线性布局来调整差异。

            2.实在需要限定死宽度,高度和距离的组件请参照谷歌官方的android design 文档。

            这份文档的链接是http://mirrors.segmentfault.com/adchs/style/metrics-grids.html

             比如,我们编写一个登录的button的高度,一般是48dp,每个activity的标题一般是48dp,界面元素之间的留白是8dp(比如每个项目显示的字体需要居中,与上下的宽度是8dp最好),等等

           3.横向图片和文字都不要并列:

            这种情况开发的时候已经碰到过很多次了。

            比如大家看下面这张设计稿:

            

          

           这张设计稿每个item是一个信息,我们编写的时候,一般喜欢使用横向的线性布局。问题就来了:每个活动的地点我们是不确定的。中间那段字体很向宽度不确定。先尝试使得中间那块(表示地点)的TextView组件的设置显示不完全(elipisize属性)。问题马上就来了:每行显示字又数很多怎么办?好吧,我们限制中间那个布局的宽度。好吧,限定中间那个表示地点的布局宽度是多少呢?随便吗?设置为80dp?出现的问题是:在LG G3 手机上,可以显示全部(连同最右边的价格和数目那个布局)。这样很好,然后在4.0英寸的HTC手机上,80dp占了很大的横巷宽度,最右边的价格栏和数目居然挤得一半在显示范围内,一般不在。

           类似上面的问题,两个项目都碰到过了。此类问题确实不好解决。我之后向设计师建议,如果图片和不确定的数目大小的文字,请隔行处理。不要占在一行。处理起来实在因为碎片化的问题很头大。

          4.关于比较合理的Textivew显示:

           Textview虽然有ellipsize这样的属性,但是这个属性并不是那么合理。就像上面说的一样,就算设置了lines和maxlines等属性,显示仍然有碎片化问题。这里提出一种解决方案:让设计师把不确定的字数目的TextView占横向的全部,然后我们在设置TextView只显示部分。

           之后我们在java代码中动态显示:

           代码如下:

          布局XML:

          

                                                                                                                                
       这里将要显示的Textivew占完横向宽度,然后设置这个组件只有部分显示。下面用一个“提示显示更多”来响应操作。

      接下来是java代码:

      

public class RegulatorActivity extends ActionBarActivity {      private TextView txtRegulatorActivityLongText;      private TextView txxtRegulatorActivityShowMore;      private static boolean SHOWMORE=false;      private static int MAXLINES=6;    protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);//            this.requestWindowFeature(Window.FEATURE_NO_TITLE);            this.setContentView(R.layout.regulator_layout);            this.initial();            SHOWMORE=false;    }    private void initial()    {       this.bindID();       this.setCLickListener();    }    private void bindID()    {        this.txtRegulatorActivityLongText=(TextView)this.findViewById(R.id.txt_regulatoractivity_longtext);        this.txxtRegulatorActivityShowMore=(TextView)this.findViewById(R.id.txt_regulatoractivity_showmore);    }    private void setCLickListener()    {          this.txxtRegulatorActivityShowMore.setOnClickListener(new View.OnClickListener() {               public void onClick(View view) {                      if(!SHOWMORE)                      {                          SHOWMORE=true;                          txtRegulatorActivityLongText.setMaxLines(Integer.MAX_VALUE);                          txtRegulatorActivityLongText.requestLayout();                          txxtRegulatorActivityShowMore.setText("收起");                      }else{                         SHOWMORE=false;                         txtRegulatorActivityLongText.setMaxLines(MAXLINES);                         txtRegulatorActivityLongText.requestLayout();                         txxtRegulatorActivityShowMore.setText("显示更多");                      }              }          });    }}
         我想,这种方法,应该是解决TextView不完全显示最好的办法了吧。

         

         关于android碎片化的问题,还有很多很多,比如操作系统问题。现在工作室开发的项目的对mainfast.xml文件中的最低sdk的支持在4.0,也就是最低适配4.0系统。因为目前大部分手机都是4.0以上的系统了。

          希望谷歌官方对android的碎片化问题可以采取更好的措施

         

           

更多相关文章

  1. android中ListView的显示效果
  2. Galaxy S8及S+全屏显示适配
  3. 当透明状态栏遇到输入框
  4. Android(安卓)高清加载巨图方案 拒绝压缩图片
  5. Android(安卓)View的测量、布局、绘制过程详解(上)
  6. android 定制 View派生类
  7. Android(安卓)UI 设计——TextView 控件
  8. Android中实现程序前后台切换效果。
  9. android绘图 报表----aChartEngine图表显示(1)

随机推荐

  1. 如何在程序中获取系统语言及修改Value-的
  2. Android(安卓)Studio 解决错误 Could not
  3. 【微信 video】微信 video 踩坑记录
  4. Android仿人人客户端(v5.7.1)——网络模块
  5. Android(安卓)Studio下通过Gradle配置实
  6. Android(安卓)线程通信,初见
  7. Android(安卓)生成 keystore签名文件
  8. 好评极高的小众神器APP,最后一个真的超好
  9. Android(安卓)ListView拖动一条记录时,整
  10. android 中几个常用属性的设置