Android入门
标题取为android入门,即时觉得android的水深的很,我仅仅才能达到入门的地步。
好了直接开讲,开始接触android的时候是在寒假,那时候本来是要寒假集训的,但是没有参加,峰哥就说寒假还是要搞一个成品出来的,我答应寒假弄一个出来。当时我是想早点回家就满口答应了,但是之前的我才上完五子棋这块的内容,装完android sdk的时候连怎么建android工程都不会,建完之后看到那些xml配置文件,完全不明觉厉,当时接触java也没那么久,甚至不知道如何有效的上网查资料,后来还是康哥给了我一份《疯狂android0》的pdf,才得以开始我的android学习。
当时我还傻傻的认为想完成一个成品需要把讲义全部看完,才能开搞,后来看着看着才发现没那么可怕,比如我做的事一款android播放器,只要学会基本的布局,获取sd卡中的音乐文件以及使用MediaPlayer类,那么基本的功能就都可以实现了,这也是我后来才感觉到的,之前以为编程也就java,c++这些东西,后来才知道还有很多细分,IDE只是工具,用IDE我们可以弄出很多东西,WEB,android,数据库,通信,以及我现在在搞得云计算等等,所以根本不可能有人可以同时兼修并精通所有东西,其中的额任何一项精通都足以让你出人头地了,更何况我们现在仅仅是入门或者涉猎。
好了现在就以我的一个android仿新闻客户端为例,来说说我学习android的体会。
首先,我觉得现在信息技术虽然说后台硬件是硬道理,但是现在的趋势是前端的美观,UI的设计更重要,学习android的过程中我发现android最难的不是那些核心的java代码怎么写,而是前台UI的设计,素材的寻找。这里我先展示下我的新闻客户端,当然我只做了一个差不多完整的demo,后台想从网站中找到新闻并解析,还有涉及到tomcat的一些功能我还没有涉猎,以后会把他完善的。
这是最开始的界面
这是新闻内容界面
这是可以跟帖的界面
这个demo的实现其实不难,就是掌握好布局,以及一些xml文件配置的基本习惯就好
第一个界面我是把Linearlayout和Relativelayout结合,然后下面是个listview,中间的新闻分类栏我用了个HorizontalScrollView 来实现它的滑动功能。其他的Button和Textview就不多做介绍了,很多人可能为那些素材发愁,这里教大家一个办法,去下载一个apk文件,比如我就下载了百度新闻的apk,把它后缀改成.rar或.zip,然后解压,就能解压出它的所有图片文件
就在drawable里面。
下面是我第一个布局文件的源码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffe7e7e7"
tools:context=".NewsActivity" >
<RelativeLayout
android:id="@+id/titlebar_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/titlebar_background" >
<TextView
android:id="@+id/tittle_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="8.0dp"
android:textColor="#ffffffff"
android:text="@string/tittle_name"
android:textSize="20sp" />
<Button
android:id="@+id/refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/refresh_btn_selector" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/tittle_layout"
android:layout_width="wrap_content"
android:layout_height="64dp"
android:layout_marginTop="-20dp"
android:background="@drawable/categorybar_background" >
<HorizontalScrollView
android:id="@+id/category_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/category_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical"
>
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
<ListView
android:id="@+id/news_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:listSelector="@drawable/list_selector"
></ListView>
</LinearLayout>
其中值得注意的是像@drawable/list_selector这样的selector文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/list_background_pressed" />
<item android:state_pressed="true" android:drawable="@drawable/list_background_pressed" />
<item android:drawable="@drawable/pic_list_default_pic" />
</selector>
这个配置文件说的是当你点击是listview的item如何变幻,松开时又如何变幻,这就是我们在手机上常看到的现象,一开始我以为这需要在java代码中调用setbackgroundresouce()方法来改变,后来才知道自己的方法有多傻。用这些配置文件可以很容易的达到我们需要的效果。
后面的布局都大同小异,掌握了线性布局,相对布局的一些常用方法就能达到效果,
Java代码中只要将需要的空间用findViewById()方法来得到,在添加监听就可以了,注意刚开始写android的时候组件不是很多,监听也不是很多,使用匿名内部类是比较方便,但是东西一多,最好使用一个findViewById()方法将所有组件一起得到,在加一个class来完成监听,这样的代码比较好维护,之前写播放器的时候一开始功能简单,也是用匿名内部类写的很方便,后来功能越来越多,代码乱的要命,自己看的都费劲更不要说别人了,这些在之前丁哥带我做android游戏的时候深有体会,可能简单的游戏只要自己写自己的activity,之后大家的加到一起来转换就可以了,但是这样的游戏维护起来的就解恨麻烦了,因为代码不仅是给你一个人看的,所以我觉得到了现在我们可以了解一些java的设计模式了,之前代码码的少没有感觉,现在码多了就感觉到了,良好的代码习惯很重要。
学习android的过程中我觉得自己真的学到了很多东西,感觉真正才到了编程入门的水平,做事就像写字一样,描红,临摹,之后才会写字,在之后才能追求更高的境界,编程也是一样,我感觉学习android之前学习的内容连描红都算不上,或许那时的东西太过基础又太过枯燥,没有激发我所有的兴趣。
真正让我激发学习兴趣的我感觉是快码公司成立的那一天,那天看着强哥,雄哥,园哥,康少已经开始创业了,心理同样也是热血沸腾,正好那时虽说是考试周但是我的考试少的可怜,就经常在蓝杰,即使不码字也多和他们聊聊天,这让我的见识,眼界都增长了不少,我才明白原来编程不只有五子棋画图板,还有web,通信,android,mySQL,oracle等等。
第二次给我激励的是峰哥的一次关于开源的20分钟短会,那时候我才真正懂得什么叫开源,之前就感觉东西学到了一个瓶颈的我一下子豁然开朗,原来可以这样,东西只要产品就行,别人不管你源码如何。这时候我才第一次懂得如何最有效的去学习,果然,之前的播放器达不到的功能几下子就搞定了。而且从别人的源码中我真的是学到了不少东西。
第三次又激励我的是陈韬上次的实习演讲,那时正好在AR讲,虽然我只是大一的,我也抱着涨涨见识的心态去听下,结果真TM涨见识。。。我第一次发现用编程来形容我现在做的事真是太小儿科了,真正的应该叫IT。只有IT才能包罗万象,当初韬神讲的东西我听过的估计只有5分之一,但当时只有一个感觉,才大一的我,有的是时间,前方的道路一片光明,只要我走下去。
第四次激励我的是有一天中午看到强哥和一个大三的创业学长在聊天,当时我也凑过去聊了,一聊吓一跳,人家大二就开始创业了,大一就有想法了,一聊才知道,大一的我看似时间很多但实际上时间紧迫,IT也的更新换代遵守的摩尔定律只有18个月,而且现在这波IT业的革命浪潮才刚刚开始,但是要是没有想法,就这么盲目的学,可能你最后也会涉猎的很广,但是终究外强中干,这次的聊天让我对以后有了 一个明确的目标,找到一个可行的 方向,坚定的走下去,或是开始创业,或是钻之弥深。
从开始搞android到现在暂时放下手头的android准备搞云计算,之间差不多两个月的时间,我不敢说技术达到了一个什么样的水平,但是对编程,对项目,对产品,对IT,对自己的认识真的升华了很多,我觉得这些东西对我的好处更甚于我本身技术的提升。这篇技术博客我没有过多的介绍自己的项目如何完成,代码如何写的,因为这些东西在网上一搜就有,我也不能写的比他们更好,但是我觉得一些对IT的感悟,对码字的感悟比起代码本身更加重要,现在这个时代,技术虽然是硬道理,但我觉得想法和决心更加重要,同时一个IT精英不能当一个技术宅,或者说不能当一个码字员。为什么乔布斯的苹果如日中天,乔布斯自己是个天才这不可否认,同时他的艺术细胞我感觉才是更重要的,要说手机的技术谁最过硬,肯定首推摩托罗拉,但是销量苹果却能笑傲群雄,因为苹果的外观完全完爆摩托罗拉,这就是乔布斯艺术细胞的体现,技术不够可以学,可以找人找团队,当然你本身技术也要足够过硬,在这之上,全面发展,所谓大道万千殊途同归,真正的好产品不是整天在电脑前码字看书就能出来的,真正的好产品肯定要自然,人性,而这些真是我们要去思考去体悟的。