1.9 相关问题剖析
1.如何区分Android Studio中的Project和Module?
在Android Studio中,Project的真实含义是工作空间,Module为一个具体的项目。Module是“一种独立的功能单元,可以运行、测试并且独立调试”,和Eclipse Project的概念有点像。Android Studio中的Project是Eclipse中Workspace的意思,Eclipse中的Project在Android Studio中是一个Module。
每一个Module需要有属于自己的Gradle build file(当新建一个Module时会自动生成,当导入一个Eclipse项目时则需自己创建)。这些Gradle文件包含了一些很重要的内容。
在Eclipse中,可以对多个Project同时进行编辑,这些Project在同一个Workspace之中。在Android Studio中,可以对多个Module同时进行编辑,这些Module在同一个Project之中。
Android Studio创建项目的过程,其实就是Eclipse创建项目过程的细分化。Eclipse在一个页面设置许多内容,Android Studio则拆分成了多个页面,因此,创建项目的过程其实并不复杂。
2.Android程序如何获取界面上的控件并在窗口中显示?
(1)在activity_main.xml配置文件中,为界面上的控件增加android:id属性,代码如下:
<TextView android:id="@+id/device_id" …… />
(2)在Activity类中通过findViewById()方法获取对应的android:id。获取activity_main. xml中配置的控件的代码如下:
TextView tv = (TextView)findViewById(R.id.device_id);
如果想让布局文件显示在当前窗口中,需要在MainActivity中的onCreate()方法中通过代码“setContentView(R.layout.布局文件名称); ”将布局文件加载到View对象中。这样当程序运行时,才能在界面看到编写好的布局。
【注意】这里我们给这个TextView赋了一个id值:android:id="@+id/device_id"。这里的“@+id”表示创建一个新的id值,这时候Android平台开发的aapt工具(Android Asset Packaging Tool)就会帮我们生成一个字段值,让我们可以通过R.id. device_id来查找出这个对象。如果是“@id”,则表示这个是对id值的引用,aapt工具不会帮我们生成一个字段值来获取这个id。
3.在Android的布局文件activity main.xml中“@+id/username”与“@id/username”两者有何区别?
分析如下所示的布局文件activity_main.xml的代码:
<TextView android:id="@+id/xyz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />
其中包含了代码android:id="@+id/xyz"和android:text="@string/hello_world"。
Android中的控件需要用一个int类型的值来表示,这个值也就是控件标签中的id属性值。id属性只能接受资源类型的值,也就是必须以@开头的值,例如@id/abc、@+id/xyz等。如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量,变量名就是“/”后面的值。例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该控件会使用这个已存在的变量的值。也就是说,如果使用@+id/name形式,当R.java中存在名为name的变量时,则该控件会使用该变量的值作为标识;如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。android:id="@id/xyz"表示TextView的id是xyz,然后就可以通过findViewById(R.id.xyz)获得一个TextView对象。
android:text="@string/hello_world"说明在res目录下建立了一个名为string的xml文件,其中包含一个名为hello_world(其值可以是任意的一段话)的string数组。这句话的意思就是将本TextView的内容设置为hello_world所代表的值。