程序的启动入口

简单的目录结构如图

2017021751319img1.png

其中 AndroidManifest.xml 文件是android项目配置文件。 见下图:

20170217824362.png

上方xml的activity标签表示对Activity进行注册。 没有在AndroidManifest.xml 注册的活动是不能使用的。

其中intent-filter的两行代码是很重要的。

<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>

表示HelloWorldActivity是这个项目的主活动。在手机上点击应用图标,首先启动的就是这个活动。

.HelloWorldActivity 其实是 com.tyrad.helloworld.FirstActivity 的缩写而已. 由于最外层的标签中已经通过 package 属性指定了程序的包名,因此在注册活动时 这一部分就可以省略了,直接使用.FirstActivity 就足够了。

关于activity

201702175333514873044676192.jpg

HelloWorldActivity最终是继承自 Activity。Activity是Android系统提供的一个活动基类。 我们在项目中的所有活动必须继承它才能有活动的特性。

  • onCreate()是activity创建时必须要执行的方法。
  • setContentView()给当前的活动加载一个布局,而在该方法中,我们一般都会传入一个布局文件的 id 。

项目中添加的任何资源都会在 R 文件中生成一个相应的资源 id,因此 我们创建布局的 id 现在应该是已经添加到 R 文件中了。 只需要调用 R.layout.name_layout 就可以得到布局的id了。

如何引用资源

res目录是app的资源目录。

  • drawable 放图片(多个drawable开头的文件夹主要是为了程序能兼容更多设备)
  • values 放字符串
  • layout 放布局文件

比如引用strings.xml的 ccc_name 的字符串

<resources>
<string name="ccc_name">helloAndroid</string>
</resources>

可以有两种引用方式: 1. 在代码中通过 R.string.ccc_name 2. 在XML中通过 @string/ccc_name

如果引用图片资源就可以将string替换成 drawable ,其他类型资源依次类推。

layout.xml

<Button 
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/button_1"/> 
  • android:id

    android:id 是给当前的元素定义一个唯一标识符,之后可以在代码中对这个元素进行操作。
    @+id/button_1 这种语法你可能感到陌生,但如果把加号去掉,变成@id/button_1,这你就会 觉得有些熟悉了吧,这不就是在 XML 中引用资源的语法吗,只不过是把 string 替换成了 id。 是的,如果你需要在 XML 中引用一个 id,就使用@id/id_name 这种语法,而如果你需要 在XML中定义一个id,则要使用@+id/id_name 这种语法。

  • android:layout_width

    android:layout_width 指定了当前元素的宽度,这里使用 match_parent 表示让当前元素和父元素一样宽。 android:layout_height 指定了当前元素的高度,这里使用 wrap_content,表示当前元素 的高度只要能刚好包含里面的内容就行。

  • android:text

    指定了元素中显示的文字内容。

日志工作的使用

  1. Log.v()
    这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose, 是 Android 日志里面级别最低的一种。

  2. Log.d() 这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助 的。对应级别 debug,比 verbose 高一级。

  3. Log.i()
    这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮 你分析用户行为的那种。对应级别 info,比 debug 高一级。

  4. Log.w()
    这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。

  5. Log.e()
    这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有 错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应 级别 error,比 warn 高一级。

参考

参考书籍: 《第一行代码》