html5中文学习网

您的位置: 首页 > ios » 正文

适用于iOS开发者的Android开发技巧_IOS开发

[ ] 已经帮助:人解决问题

   我曾经从事过五年的iOS应用开发工作,那段时间我一直在尽量避免同Android打交道——不过现在情况不同了。不管大家是否相信,Android开发其实乐趣满满、而且与iOS开发相比也不像大家想象的那样差异巨大。tVbHTML5中文学习网 - HTML5先行者学习网

  我在Android平台上开发出这款“七分钟锻炼”应用,并借此学到了很多宝贵的知识。我希望这篇文章分享的一些小技巧也能帮助大家解决实际问题。请注意,我接下来进行比较的内容并不一定完全匹配,而且本文的重点也不在于完整地叙述Android开发;当然,我一定会提到自己在开发这款简单应用的过程中所积累到的全部经验。tVbHTML5中文学习网 - HTML5先行者学习网

适用于iOS开发者的Android开发技巧 三联

  IDEtVbHTML5中文学习网 - HTML5先行者学习网

  我选择使用Android Studio,而且我愿意打赌:只要测试完成,它将成为未来的业界标准。虽然很多报道称它的运行状态并不稳定,但在我的实际使用中、它仅仅崩溃过一次。也许我只是习惯了Xcode。tVbHTML5中文学习网 - HTML5先行者学习网

  JavatVbHTML5中文学习网 - HTML5先行者学习网

  无论大家对Java如何评价,说到底它也只是不过是一种编程语言而已。它能够解决问题,而且对于经验丰富的开发者来说、大家肯定是把主要精力放在框架而非Java身上。很高兴我用不着跟J2EE扯上关系。tVbHTML5中文学习网 - HTML5先行者学习网

  iOS加密tVbHTML5中文学习网 - HTML5先行者学习网

  移动应用安全保护平台——爱加密,在Android应用加密保护方面有dex加壳、独有的so库加密保护、资源文件保护等。而且推出了iOS应用加密保护,实属全球首创。分别从本地数据、方法体/方法名、URL编码、程序结构、网络传输数据等几个方面对iOS应用进行全方位的保护,并可以根据iOS应用用户的需求提供定制解决方案,从而实现iOS防破解保护。下图是iOS应用使用前后tVbHTML5中文学习网 - HTML5先行者学习网

  模拟器tVbHTML5中文学习网 - HTML5先行者学习网

  我一直认为iOS模拟器让人头痛不已,但相比之下我才发现当初的自己还是太年轻。在稍作尝试之后,我决定放弃Android模拟器、直接将应用部署在实际设备上——除非大家愿意拿出大量时间盯着屏幕枯等。tVbHTML5中文学习网 - HTML5先行者学习网

  Storyboard / NIBtVbHTML5中文学习网 - HTML5先行者学习网

  我在自己的iOS开发博客上谈了很多关于Storyboard的话题,很多与我意见相左的读者发来的一些措辞强硬的邮件让我彻底放弃了这一交流平台。tVbHTML5中文学习网 - HTML5先行者学习网

  Android使用的布局格式为xml。它们彼此之间完全独立。Android Studio还提供一套出色的“所见即所得”编辑器:tVbHTML5中文学习网 - HTML5先行者学习网

  但大家仍然可以深入到原始xml当中——如果愿意的话(反正我一般是不愿意这么麻烦)。tVbHTML5中文学习网 - HTML5先行者学习网

  相对于自动布局,大家也可以选择其它布局容器,例如RelativeLayout以及FrameLayout之类。在这里,我们能够以像素数量(即设备的像素容纳能力)或者matchparent、wrapcontant等来设定理想的宽度、高度、填充效果、边框以及色调。tVbHTML5中文学习网 - HTML5先行者学习网

  Wrap非常适合文本内容,它会自动将调整正确的高度并设定与之相适应的尺寸,并把其余工作交给LinearLayout等特定布局方案。tVbHTML5中文学习网 - HTML5先行者学习网

  虽然我还没有用过,但Fragment看起来同样是一种对自定义UI元素加以重新利用的好途径。tVbHTML5中文学习网 - HTML5先行者学习网

  UIViewControllertVbHTML5中文学习网 - HTML5先行者学习网

  Android利用一个Activity来实现UIViewConroller的功能。每一个屏幕/窗口都相当于一个Activity。我们就在这里处理大部分工作,包括将数据绑定到UI当中或者处理事件等等。tVbHTML5中文学习网 - HTML5先行者学习网

  Controller/View转换tVbHTML5中文学习网 - HTML5先行者学习网

  在iOS当中我们利用segue、pushViewController、presentController等在不同屏幕之间进行迁移。但在Android环境下,我们需要使用Intent。tVbHTML5中文学习网 - HTML5先行者学习网

  大家可以轻松迁移至新的activity当中,甚至能够将一部分数据传递过去。tVbHTML5中文学习网 - HTML5先行者学习网

  public void onItemClick(...) {tVbHTML5中文学习网 - HTML5先行者学习网

  Intent i = new Intent(getBaseContext(), MyActivity.class);tVbHTML5中文学习网 - HTML5先行者学习网

  i.putExtra("row", position);tVbHTML5中文学习网 - HTML5先行者学习网

  startActivity(i);tVbHTML5中文学习网 - HTML5先行者学习网

  }tVbHTML5中文学习网 - HTML5先行者学习网

  在新的Activity(也就是以上代码中的MyActivity)中,我们可以提取出传递来的数据:tVbHTML5中文学习网 - HTML5先行者学习网

  protected void onCreate(Bundle savedInstanceState) {tVbHTML5中文学习网 - HTML5先行者学习网

  super.onCreate(savedInstanceState);tVbHTML5中文学习网 - HTML5先行者学习网

  setContentView(R.layout.activity_mine);tVbHTML5中文学习网 - HTML5先行者学习网

  Bundle extras = getIntent().getExtras();tVbHTML5中文学习网 - HTML5先行者学习网

  if (extras != null) {tVbHTML5中文学习网 - HTML5先行者学习网

  int row = extras.getInt("row");tVbHTML5中文学习网 - HTML5先行者学习网

  ....tVbHTML5中文学习网 - HTML5先行者学习网

  }tVbHTML5中文学习网 - HTML5先行者学习网

  ...tVbHTML5中文学习网 - HTML5先行者学习网

  }tVbHTML5中文学习网 - HTML5先行者学习网

  大家也可以利用Intent来触发各类事件,例如实现表格共享:tVbHTML5中文学习网 - HTML5先行者学习网

  Intent sendIntent = new Intent();tVbHTML5中文学习网 - HTML5先行者学习网

  sendIntent.setAction(Intent.ACTION_SEND);tVbHTML5中文学习网 - HTML5先行者学习网

  sendIntent.putExtra(Intent.EXTRA_TEXT, "Share This");tVbHTML5中文学习网 - HTML5先行者学习网

  sendIntent.setType("text/plain");tVbHTML5中文学习网 - HTML5先行者学习网

  startActivity(sendIntent);tVbHTML5中文学习网 - HTML5先行者学习网

  IBOutlettVbHTML5中文学习网 - HTML5先行者学习网

  也许大家跟我一样,在超过半数的情况下会忘记连接IBOutlet。tVbHTML5中文学习网 - HTML5先行者学习网

  在Android当中,每一个场景/组件都拥有独立的ID,内容如下所示:tVbHTML5中文学习网 - HTML5先行者学习网

  @+id/myButtontVbHTML5中文学习网 - HTML5先行者学习网

  它随后会自动生成一个名为R的类,接下来我们可以如下所示访问代码中的按钮:tVbHTML5中文学习网 - HTML5先行者学习网

  Button button = (Button)findViewById(R.id.myButton);tVbHTML5中文学习网 - HTML5先行者学习网

  标签tVbHTML5中文学习网 - HTML5先行者学习网

  iOS开发者们经常使用的一项技巧就是利用场景标签来保存查找信息,例如整体布局的位移。在Android环境下,大家也可以将整个对象加入到标签当中,这种作法非常实用。tVbHTML5中文学习网 - HTML5先行者学习网

  row.setTag(data);tVbHTML5中文学习网 - HTML5先行者学习网

  UITableViewController / UITableViewDataSource / UITableViewCelltVbHTML5中文学习网 - HTML5先行者学习网

  Android当中的ListView就相当于iOS上的UITableView。tVbHTML5中文学习网 - HTML5先行者学习网

  而UITableViewDataSource在Android中所对应的则是ArrayAdapter:tVbHTML5中文学习网 - HTML5先行者学习网

  MyAdapter adapter = new MyAdapter(this, R.layout.listview_item_row);tVbHTML5中文学习网 - HTML5先行者学习网

  listView.setAdapter(adapter);tVbHTML5中文学习网 - HTML5先行者学习网

  其中listviewitemrow属于某一行的布局,相当于iOS中的UITableViewCell。tVbHTML5中文学习网 - HTML5先行者学习网

  其中的adapter随后会在getView当中创建/重新使用各行。tVbHTML5中文学习网 - HTML5先行者学习网

  大家也可以像这样设置标题:tVbHTML5中文学习网 - HTML5先行者学习网

  View header = getLayoutInflater().inflate(R.layout.listview_header_row, null);tVbHTML5中文学习网 - HTML5先行者学习网

  listView.addHeaderView(header);tVbHTML5中文学习网 - HTML5先行者学习网

  图片/资源tVbHTML5中文学习网 - HTML5先行者学习网

  由于有了Asset Catalogue的辅助,iOS环境下的图片处理变得非常轻松,通常情况下开发者只需考虑视网膜屏与非视网膜屏这两种情况(除非大家想要在iPhone上使用专门针对iPad的图片)。tVbHTML5中文学习网 - HTML5先行者学习网

  由于Android阵营下各款设备的分辨率千差万别,因此大家必须要提供以下四种图片格式。tVbHTML5中文学习网 - HTML5先行者学习网

  它们分别是:mdpi(普通分辨率)、hdpi(高分辨率)、xhdpi(超高分辨率)以及xxhdpi(超超高分辨率)。我个人认为xxxhdpi版本的诞生将只是时间问题。tVbHTML5中文学习网 - HTML5先行者学习网

  在利用Android Studio创建项目时,大家只需要提供一份图标、它就能自动创建出这四种格式。这种作法相信已经给从事过Android应用开发的朋友们留下了严重的心理阴影:别怕,大家可以随后手动将其替换为完美的像素版本。tVbHTML5中文学习网 - HTML5先行者学习网

  因此,最基本的解决思路就是为每幅图片针对每种像素密度创建一个单独的版本,为其设定同样的名称并放在正确的文件夹之下;这样Android就会视设备平台的具体情况挑选理想的版本。tVbHTML5中文学习网 - HTML5先行者学习网

  自定义字体tVbHTML5中文学习网 - HTML5先行者学习网

  自定义字体在Android上实现起来同样非常简单:将字体复制到main/assets当中,而后就能利用以下代码加以调用:tVbHTML5中文学习网 - HTML5先行者学习网

  Typeface font = Typeface.createFromAsset(getAssets(), "Lato-Regular.ttf");tVbHTML5中文学习网 - HTML5先行者学习网

  textView.setTypeface(font);tVbHTML5中文学习网 - HTML5先行者学习网

  问题在于这种方式并不是在所有设备上都行得通,因此大家需要准备一套后备字体——不过我自己手头的两台Android设备都没有提供这样的字体。tVbHTML5中文学习网 - HTML5先行者学习网

  NSLogtVbHTML5中文学习网 - HTML5先行者学习网

  日志看起来没什么可讲的,大家可以利用它来进行应用程序调试什么什么的(此处省去一千字)。System.out.println(..)似乎也同样能够完成这项任务。tVbHTML5中文学习网 - HTML5先行者学习网

  向下兼容能力tVbHTML5中文学习网 - HTML5先行者学习网

  我们都听说过Android设备的碎片化问题。不过从本质上讲,处理旧版本Android的难度并不比在旧版本iOS上使用新型iOS功能更高。不过大家可能需要对这种兼容能力加以高度重视,毕竟Android环境下这类问题的出现频率要远高于iOS。tVbHTML5中文学习网 - HTML5先行者学习网

  我们可以通过下列代码来检查当前Android版本:tVbHTML5中文学习网 - HTML5先行者学习网

  if (Build.VERSION.SDK_INT >= 11.0) {tVbHTML5中文学习网 - HTML5先行者学习网

  ...tVbHTML5中文学习网 - HTML5先行者学习网

  }tVbHTML5中文学习网 - HTML5先行者学习网

  以下代码则用于防止函数调用引发的警告信息:tVbHTML5中文学习网 - HTML5先行者学习网

  @SuppressLint({"NewApi", "LocalSuppress"})tVbHTML5中文学习网 - HTML5先行者学习网

  private void myFunction() {tVbHTML5中文学习网 - HTML5先行者学习网

  ...tVbHTML5中文学习网 - HTML5先行者学习网

  }tVbHTML5中文学习网 - HTML5先行者学习网

  千奇百怪的漫长Android之旅tVbHTML5中文学习网 - HTML5先行者学习网

  CountDownTimertVbHTML5中文学习网 - HTML5先行者学习网

  CountDownTimer——这项内置功能的存在实在让我兴奋不已,因为这正是我的七分钟锻炼应用所必需的要素。然而经过实际测试,它不会在onFinish之前发送最后一次onTick,这是个非常诡异的bug而且到现在也没能得到修复。诡异,真是太诡异了。tVbHTML5中文学习网 - HTML5先行者学习网

  方位tVbHTML5中文学习网 - HTML5先行者学习网

  当用户转动手中的设备时,我们的activity也会完全重置,这意味着大家必须在activity重新载入之后为其保留全部状态与恢复机制。Android环境下的处理方式令人头痛,但iOS则处理得很好。tVbHTML5中文学习网 - HTML5先行者学习网

  Kindle Fire / Amazon StoretVbHTML5中文学习网 - HTML5先行者学习网

  要让自己的应用程序顺利入驻Amazon Store,我只需要对现有成果作出两项调整:tVbHTML5中文学习网 - HTML5先行者学习网

  ·YouTube SDK无法起效,因为Kindle Fire上不提供YouTube应用。不过对Flash的支持能力依然被保留下来。tVbHTML5中文学习网 - HTML5先行者学习网

  ·大家需要针对Amazon Store替换应用购买代码。tVbHTML5中文学习网 - HTML5先行者学习网

  大家可以利用android.os.Build.MANUFACTURER以及android.os.Build.MODEL对设备的制造商以及产品型号信息进行检测。tVbHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
  • 评论
2人参与,2条评论
  • 最新评论
2016年7月3日 9:44 满城灯火

某地牛蒡卖不出去。县长找了宣传部门,要宣传部门去交易会做好宣传。交易会上,宣传部长拿着牛蒡说:”男人吃了男人受不了,女人吃了女人受不了。“一老农问:”如果男女都吃呢?“部长说:”都吃,床受不了。“老农说:”既然这么好,为什么不多种一些?0部长说:”种多了,地受不了。“老农说屋前屋后为什么不种点?“部长说:”种多,屋受不了。“

推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助