给iOS开发者的Android开发建议_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > 给iOS开发者的Android开发建议

给iOS开发者的Android开发建议

 2014/6/2 11:16:45    程序员俱乐部  我要评论(0)
  • 摘要:英文原文:AndroidDevelopmentTipsForiOSDevs本人从事iOS应用开发已经5年有余,直到现在还总是刻意回避Andriod应用的开发。但是不管你信不信,安卓开发还是很有意思的,从iOS转向Android应用开发的跨度并没有你想象的那么大。现在我把在开发7分钟训练这款Android应用中所学到的一些东西与大家分享,希望能对你们有所帮助。需要指出的是,我稍后所比较的每个项目并不是完全匹配的,并且这篇文章并不是一个完整的Android应用开发概述
  • 标签:android iOS 建议 开发 开发者 Android开发
class="topic_img" alt=""/>

  英文原文:Android Development Tips For iOS Devs

  本人从事 iOS 应用开发已经 5 年有余,直到现在还总是刻意回避 Andriod 应用的开发。但是不管你信不信,安卓开发还是很有意思的,从 iOS 转向 Android 应用开发的跨度并没有你想象的那么大。

  现在我把在开发 7 分钟训练这款 Android 应用中所学到的一些东西与大家分享,希望能对你们有所帮助。需要指出的是,我稍后所比较的每个项目并不是完全匹配的,并且这篇文章并不是一个完整的 Android 应用开发概述,但是它包涵了我从开发这个简单应用所学到的点点滴滴。

7minsandroid

  开发环境

  开发环境我选择了 Android Studio,我打赌当正式版发布以后,它将成为 Android 应用的标准开发环境。虽然有很多关于 Android Studio 不稳定的言论,但是我只遇到了一次程序崩溃,个人认为 Android Studio 稳定性尚可,也许是已经适应了 Xcode 的习惯性程序崩溃吧。

  Java

  说说你对 Java 了解多少,说白了它只是另外一门编程语言。像其他语言一样,协助你利用计算机实现你的想法,如果你是个经验丰富的程序员,你将会把更多的精力投入到应用的架构,而不是 Java 语言本身。谢天谢地,我们并不需要学习 J2EE

  模拟器

  在使用 Android 模拟器之前,我习惯性的认为 iOS 的模拟器糟糕透了,现在看来 iOS 的模拟器还是很给力的。能不用 Android 模拟器就尽量别用,直接上真机调试;要不然你就准备好把大把时间花在无谓的等待上吧。

  Storyboard / NIBS

  对于 storybaord 的使用,在我之前 iOS 开发的文章中已经有所阐述,在是否使用 Storyboard 这个问题上,之后还收到了持不同看法的读者措辞强烈的来信,今天对此我们不予讨论。

  Android 使用 xml 来编写布局。不同布局彼此是完全独立的。Android Studio 同时也提供了一个非常好的 WYSWYG 编辑器:  

  你也可以深入原始 xml 文件进行编辑(我自己经常这么做)。

  各种布局容器可以被用来当做自动布局的替代方案,比如 Relative Layout, Framelayout 等等。选中布局后,你可以对布局的宽度,高度,填充,留白,比重等属性进行像素(dp 设备像素)级的设定,或者直接将它们设置为 match parent, wrapcontent。

  Wrap-content 对于文本来说是个很好的选择,它会自动根据文本来决定视图的尺寸。

  虽然我还没有习惯使用 fragments,但似乎确实是一个不错的自定义界面的复用的方式。

  UIViewController

  Android 中等同于 iOS UiViewController 的是一个叫 Activity 的组件。你所看到的每个视图和窗口都是一个 Activity。在 Activity 中,你做的最多的就是把数据和 UI 绑定,处理各种事件等等。

  Transitioning Controllers / Views

  在 iOS 中我们使用 segues、 pushViewController、 presentController 进行不同视图间的切换。在 Android 中,我们则用一个叫 Intent 的组件。

  你可以轻松地使用 intent 去创建一个新的 Activity,甚至是传递一些数据给新创建的 Activity。

public void onItemClick (...) {
       Intent i = new Intent (getBaseContext (), MyActivity.class);
       i.putExtra ("row", position);
       startActivity (i);
}

  在新创建的 Activity(如上所示的 MyActivty)中,你可以以这样方式提取之前 Activity 传递的数据。

protected void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_mine);
 
    Bundle extras = getIntent () .getExtras ();
    if (extras != null) {
        int row = extras.getInt ("row");
        ....
     }
     ...
 }

  你也可以使用 Intent 去触发一些东西,例如:分享页面。

Intent sendIntent = new Intent ();
sendIntent.setAction (Intent.ACTION_SEND);
sendIntent.putExtra (Intent.EXTRA_TEXT, "Share This");
sendIntent.setType ("text/plain");
startActivity (sendIntent);

  IBOutlet

  如果你像我一样至少有一半时间会忘记连接 IBOutlets,Android 将是你的福音。

  Android 中每一个视图/组件都有一个唯一的 ID,例如:

@+id/myButton

  Android 将会为这些 ID 自动生成一个叫做R的类(想了解更多R点击这里),你可以通过如下的方式来操作这个 Button 对象。

Button button = (Button) findViewById (R.id.myButton);

  Tag

  为视图设置一个 tag 来查找信息是 iOS 开发者们常用的一个小技巧,例如:数组的偏移。而在 Android 你可以讲这个对象设置成 tag,相当的有用。

row.setTag (data);

  UITableViewController / UITableViewDataSource / UITableViewCell

  在 Android 中与 UITableView 相对应的是 ListView。

  与 UITableViewDataSource 大体上相对应的是 ArrayAdapter:

MyAdapter adapter = new MyAdapter (this, R.layout.listview_item_row);
listView.setAdapter (adapter);

  如上的例子中,listviewitemrow 是布局中的一行,大体上相当于一个 UITableViewCell。

  Adapter 通过 getView 来创建或复用不同的列。

  你还可以设置表头:

View header = getLayoutInflater () .inflate (R.layout.listview_header_row, null);
listView.addHeaderView (header);

  网上有大把相关的好教程,例如这个。

  Images / Resources

  自从 Asset Catalogues 在 iOS 出现后,对于图片的处理就轻松了很多,而且只需要应付 retina 和非 retina 屏幕即可(除非你还有专门为 iPad 使用的图片)。

  为了适应不同 Android 设备的分辨率,你需要提供四套不同尺寸的图片。

  它们分别是:mdpi (中等质量)、hdpi (高质量)、 xhdpi (超高质量), xxhdpi (宇宙无敌高质量)。个人很期待 xxhdpi 画质的出现。

  当你在 Android Studio 里创建工程的时候,它会为你所提供的应用图标自动生成四种不同尺寸的图标。这可把设计师们吓的心肝儿发颤了吧,别担心,稍后它们还是可以被完美的图标所替换的。

  所以,基本的理念就是对应不同的屏幕分辨率创建不同的图片,并用与之相对应的屏幕分辨率的名字命名后,放入正确的文件夹中,之后的事情就交给 Android 去处理吧。

  自定义字体

  自定义字体在 Android 中也相当容易实现:拷贝字体到 main/assets 文件夹,之后你可以像这样调用他们

Typeface font = Typeface.createFromAsset (getAssets (), "Lato-Regular.ttf");
textView.setTypeface (font);

  这种方法并不是在所有设备上都可行,最好还是加上 try/catch 方法来处理异常,即是在我的两台 Android 设备上从来没有出现过异常。

  NSLog

  看来 Log 似乎是 Android 给我们提供的解决方案,你指定 log 的类型:debug ,verbose 等等。当然,Java 最基本的打印语句 System.out.println (..) 也是行得通的。

  向下兼容性

  我们常听说 Android 碎片化。对于这个问题在 Android 中的解决技巧,跟我们在使用 iOS 新特性又要兼顾老版本时所采用的技巧基本上差不多。 你也许需要更频繁,更长久的使用这些技巧。

  Android 中有一个非常有用的常量供你查询当前的 Android 的 API 版本号。

if (Build.VERSION.SDK_INT >= 11.0)  {
...
}

  你可以这样来屏蔽警告:

@SuppressLint ({"NewApi", "LocalSuppress"})
private void myFunction () {
...
}

  令人诧异的东西

  计时器

  我对 Android 内建了计时器这样的功能感到非常兴奋,它正是我开发 7 分钟训练所需要的。可是它不发送在计时结束前的最后一次信号,就是这样一个令人诧异的 bug,仍旧没有得到修复。恼火,太恼火了!

  屏幕方向

  当用户旋转屏幕的时候,activity 被完全重置,这意味着你需要保存所有 activity 重置前的状态,并在 activity 继续后重新还原这些状态。这可能会让你感到有点诧异,因为在 iOS 中旋转屏幕,你不需要做任何处理,一切照旧。

  Kindle Fire / Amazon Store

  在亚马逊商店发布应用相当简单,我只想说两点:

  • YouTube 的 SDK 将会停止工作,因为需要 Youtube 应用的支持,而 YouTube 应用在此是不可用的,但似乎它们是支持 Flash 的。
  • 为了亚马逊商店,你需要清除源代码里的内购代码。

  你可以通过使用 android.os.Build.MANUFACTURER 和 android.os.Build.MODEL. 来查询设备的制造商和型号。

  在此列出一份 kindle fire 型号详细资料清单。

  下一步?

  希望未来我能给 7 分钟训练这个应用添加更多的功能,并且开发更多的 Android 应用。我相信我只看到了 Android 的冰山一角。谁知道呢,说不定接下来还有初探应用商店的精彩教程等着你呢。

  翻译: 伯乐在线 - 北欧的杂木林   (新浪微博:@北欧的杂木林)

  译文链接:http://blog.jobbole.com/69329/

发表评论
用户名: 匿名