zoukankan      html  css  js  c++  java
  • 首发教学帖,Android开发(一)Hello World!

            从事开发近六年了,接触Android开发也半年多了,绝不敢称牛人,因为牛人还大有人在。博客园的帐号开到现在还是没写过一篇像样的,当初开的时候就是打算写点什么,以回报这些年在网上搜索的资料,因为如果人人都只搜索不贡献那大家也不会搜到那么好的文章了。

       废话少说了,这是第一次写技术帖,不及之处,还望包涵。牛人就免进了,因为从最简单的讲起的,就当是给自己这一段的学习做一次回顾吧!从经典的Hello World! 开始,后面会一个个题目写下去。我会从我自己开发的应用当中把由易至难的功能点拿出来写,我的应用发布至今国内各Android市场下载量也近5万了(为了不被人说我是来宣传自己的应用的,故不给出什么链接),大家给出的评价也还算可以。

            这一节我们还是从Hello World讲起吧!至于环境的安装我就不讲了吧!大家一搜一大堆,我也是搜过来的。我的环境是Windows7+Eclipse:

    大家都清楚,初入某个领域的开发,我们都是写Hello World!毕竟太经典了,呵呵。首先,我们新建一个项目,什么?不会建?给个截图吧!

    如果你的环境安装正确的话你应该有以下的选择,选择“Android Project”

    点击"Next"进入下一步,填写一些项目的信息。注意这个地方,我刚开始因为屏幕方辨率的问题,没注意到滚动条可以拉下去还有东西可以填写的,所以总是提示出错。

    好了,填完项目名,那个Location的目录第一次启动Elipse的时候会指定workspace,我把所有android项目都放到这个目录下了,当然你也可以自己选择目录,自己看着办吧!要提一下这个Build Target,我之所以选1.6的原因是我发现在开发过程中,为了兼容低版的android手机选1.6比较好,因为2.2基本上运行基于1.6开发的应用没有什么问题,当然肯定会有例外的,大家要自己尝试,至少我的应用没有问题(也有可能是没有涉及到系统权限调用的原因。好啦!填好了你就拉右边的滚动条,之后继续填写项目信息:

    上面不是填了项目名吗?怎么又来个Application name呢?顾名思义这个叫做应用名嘛。。。。。。不作解释了,以后大家都会懂的,嘻嘻!现在要填Package name了,这个东西很重要,可以多写几个单词,凡是学习java的对Package name应该没问题吧?什么?和我一样做.net出身的?那么你就理解是命名空间(name space)吧!然后填Create Activity了,建议你勾起来,后面再讲为什么(不勾的话自己后面慢慢去补写这个启动界面类吧!),最后填这个Min SDK Version,这个东东呢!你上面的Buid Target选的是多少,最后面那列不是有“API...”吗?那里不是写着数字嘛?抄下来吧,如1.6是4。好了,点Finish后HelloWorld建完了,现在我们来看看项目结构。

    如果你正确的建立了项目,在Eclipse中展开项目,结构应该如上图一样。我们来看看几个重要的文件夹:

    src:废话,程序员都明白这里是放代码的。。。。。

    gen:这里就不要去动它了,自动生成的代码会在这里出现,那个R.java绝对不是你要去更改的东西,否则后果自负,呵呵。

    这个Android 1.6跟你选的Build Target有关系,也是不用你改的,是项目自动引用的,因为只有引用了这个,才能调用SDK中的功能。

    assets:这里可以放一些外部文件,如一些文本等。

    res:顾名思义就是resources的缩写,这下面有好几个文件夹,我们再详细的来看:

      drawable-xdpi (x代表h、l、m):这里放置你要用来做界面的一些图片的,而这个h、l、m分别是放置高、低、中分辨率的图片,至少高到什么程度、低到什么程度是项目的实际需求了,不过有时我把这三个文件夹都删了,建了一个drawable也行,不过只能放一种分辨率的图片。

      layout:这里是放布局文件的,建项目时默认就有一个main.xml了,看名字你也知道是主界面的布局了。

      values:默认有了一个strings.xml并且你如果打开的话里面还有值,android默认是把程序中的字符串存在这里的,这样就能实现多语言化,界面中的值可以与代码分离等。

    最后看看AndroidManifest.xml,这是存储应用的配置的,包括应用名、图标、启动界面的配置都在这里啦!有兴趣去看看,后面再讲到这个。

    然后我们关心的是Hello World怎么显示出来是吧!

    现在我们打开layout里的main.xml发现代码是这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    </LinearLayout>
    

    这个LinearLayout后面再解释,大概意思就是采用相邻的布局,里面有一个TextView,这个就是一个文本控件。同我一样.net出身的,就理解它为Label吧!(我有时还把它命名以"lbl"开头。。。。表笑我)。接着两个属性分是宽高,fill_parent就是填充满父控件,而wrap_content则是根据内容有多长就显示多长,所以这个TextView的宽度是填充满父控件,高度根据内容的多少决定。关键的是我们来看android:text,你已经猜到了吧?文本嘛!但这个@string/hello又是啥呢?

    我们打开values下的string.xml就明了了。你初打开时可能是这样的:

    不过你可以点strings.xml来切换到代码视图中来,代码应该如下:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, MainActivity!</string>
        <string name="app_name">HelloWorld</string>
    </resources>
    

    上面不是问到那个@string/hello是什么吗?你猜到了吧!对了,就是这里的<string name="hello">中的值了。你这里爱改什么改什么!至于app_name,它是应用显示的名称,改了以后你安装到机子上就是这个名称。

    也打开那个MainActivity.java来看看吧,你发现这个类继承了Activity,并且自动实现了一个onCreate方法,代码是这样的:

    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    

    我们看最后这句,setContentView(R.layout.main),这个意思就是说将那个xml文件的内容加载进来。现在只差最后一步你就明了整个项目中的连接了,打开AndroidMainifest.xml看看这段代码:

    <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".MainActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    

    icon自然就是图标了,label就是要显示的应用程序名,而activity的配置下面的intent-filter这里我不多做解释,只要知道这么配应用就是从这个activity启动的。

    好了,我们讲了这么多,目的是要明白整个项目工作的原理的,AndroidMainifest.xml里面配置的是从MainActivity启动(不能删掉那个"."),而这个MainActivity.java里的OnCreate里将main.xml的内容给加载到界面中去了,这下挺明了了吧?

    讲了半天,其实没写一行代码。。。。。只是你自己在strings.xml中改改要显示的内容吧!然后要运行啦!看图看图:

    提一下如果你环境都装好的情况下,要在Eclipse里调出Android SDK and AVD Manager,放图放图:

     

    然后自己新建几个模拟器,我机上建了三个,1.6、2.1、2.2的:

    回到刚才说运行了。因为我的项目的Build Target是1.6的,所以它自动启动了1.6的这个模拟器开始跑了,或者它也会跳出提示框让你选模拟器,自己搞一下吧!然后效果就是这样了:

    哈哈,搞这么久Hello World!才出来,没关系,我们前面罗嗦点是为了以后跑得更快。先写这么多吧!第一次发教程帖,发现真的挺累的,会继续写几篇吧!后面就看有没有朋友支持了,有的话会努力的写的。

    转载请注明来自博客园,作者:jauntlin

  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/jauntlin/p/2019055.html
Copyright © 2011-2022 走看看