[关闭]
@stepbystep 2015-01-18T09:47:38.000000Z 字数 8843 阅读 18916

Android Studio初步使用及HelloWorld详解

Android

Android Studio初步配置

设置环境变量

(说明) 实验楼环境中已经配置好了桌面启动图标
每次切换到android studio的安装目录,启动程序会很麻烦,linux下可以很简单的设置环境变量

  1. // 修改用户环境变量
  2. gedit ~/.bashrc

打开的文件中最后一行下添加如下内容/opt/android-stuido为android studio的安装目录
export PATH=/opt/android-stuido/bin:$PATH
启用环境变量, 在终端输入

  1. source ~/.bashrc

重新启动终端,输入下面命令,就可以启动android studio了

  1. //linux下命令后面添加'&'符号表示程序独立启动,即便ctrl+c也不会结束程序
  2. studio.sh &

设置主题和字体

设置主题
有的人喜欢IDE是黑色的,看起来比较Geek,在Android中可以简单的设置这样的主题
进入Android studio后,点击File->Settings
img

进入设置界面,输入Appearance
img

会提示重新启动Android Studio,重新进入之后,就成功了
img

设置字体
为了方便查看,我们在实验楼的环境下还是采用白天的主题
同样进入File->Settings选项之后,输入fonts,就可以设置字体了
img

点击Save As之后,新建一个字体方案
img

接下来设置字体等样式,点击Ok后就设置成功了
img

Android Studio常用功能说明

打开工程

点击File->open
img

在弹出的对话框中选择我们要打开的项目,一般是Android Studio的工程的话,前面会有一个Android Studio的logo
img

关于打开Eclipse下面的工程,可以参考如下网址
http://www.cnblogs.com/bluestorm/p/3757402.html

Android Studio工程视图

android studio下面设置了三中工程视图(Project、 Packages、Android),如下:

img

默认打开后为Android视图, 而Packages视图如下
img

Project视图是最全面的视图,如下
img

Android Studio的工程结构

在Project视图下,我们可以看到完整的目录结构
- .idea主要包含了一些项目的元数据的存储

- **app为项目的主要目录**
    图示说明

img

- libs为项目需要添加的*.jar包或*.so包等外接库
- src为项目的源代码其中Android Test为测试包,**main为主要的项目目录**
    - main目录下的java目录,存储所有的项目源文件
    - res为资源目录,存储所有的项目资源
        - 其中drawable目录存储一些xml文件
        - drawable-*dpi表示存储分辨率的图片,用于适配不同的屏幕
            - mdpi:320x480
            - hdpi:480x800、480x854
            - xhdpi:至少960*720
            -xxhdpi:1280×720
        - layout目录存储布局文件。
        - values目录存储app引用的一些值
            - dimens.xml 存储了一些公用的dp值
            - strings.xml 存储了引用的String值
            - styles.xml 存储了app需要用到的一些样式
        - values-w820dp为专用的设备设置引用
- AndroidManifest.xml为APP的配置信息。

- 此目录下的build.gradle为项目的gradle配置文件。

HelloWorld详解

切换到Project视图

**说明,在android studio中,所有的引用和类型等都可以通过按住Ctrl键,点击鼠标左键定位到被引用的位置。如下图,**
img
此后就会跳转到activity_main.xml文件。

在app目录下,build.gradle文件如下
文件路径: project视图下,app/build.gradle

  1. apply plugin: 'com.android.application'
  2. android {
  3. // 编译器选择的版本
  4. compileSdkVersion 14
  5. buildToolsVersion "21.1.1"
  6. // 默认配置
  7. defaultConfig {
  8. // 应用程序包名
  9. applicationId "com.example.shiyanlou.myapplication"
  10. // 最小的版本,即手机需要13的sdk才能运行
  11. minSdkVersion 15
  12. // 目标sdk
  13. targetSdkVersion 21
  14. // app 版本号
  15. versionCode 1
  16. // app 版本名
  17. versionName "1.0"
  18. }
  19. // build 配置,暂不用管
  20. buildTypes {
  21. release {
  22. minifyEnabled false
  23. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  24. }
  25. }
  26. }
  27. // 外接的包需要在下面添加
  28. dependencies {
  29. compile fileTree(dir: 'libs', include: ['*.jar'])
  30. compile 'com.android.support:appcompat-v7:21.0.3'
  31. }

在src/main/java/com.example.shiyanlou.myaplication目录下,MainActivity.java
主界面注释解释

  1. package com.example.shiyanlou.myapplication;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. /**
  7. * 自定义Activity类,要求必须继承android.app.Activity;
  8. * 此处因为新建的时候选择了BlankActivity,默认继承ActionBarActivity
  9. * 由于Activity是android四大组件(Activity(活动),Service(服务),
  10. * BroadcastReceiver(广播接收者),Content Provider(内容提供者))之一, 因此必须在功能清单文件(AndroidManifest.xml)中进行注册,注册方式为:
  11. * <activity
  12. android:name="com.example.shiyanlou.myapplication.MainActivity"
  13. android:label="@string/app_name" >
  14. <intent-filter>
  15. <action android:name="android.intent.action.MAIN" />
  16. <category android:name="android.intent.category.LAUNCHER" />
  17. </intent-filter>
  18. </activity>
  19. */
  20. public class MainActivity extends ActionBarActivity {
  21. /**
  22. * onCreate在Activity被创建时被调用,而且只调用一次,主要用来完成初始化工作
  23. * 需要注意的是,此时的super.onCreate(savedInstanceState);不能省略,它用于保存恢复现场
  24. */
  25. *
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. /*
  30. * 将Activity到用户界面设定为R.layout.activity_main,即
  31. * res/layout/activity_main.xml
  32. * 可在build/generated/source/r/debug/com../R.java下查看layout静态内部类中的activity_main的静态成员
  33. * 对应的是res/layout/activity_main.xml*/
  34. setContentView(R.layout.activity_main);
  35. }
  36. /**
  37. * 在用户单击手机上的菜单键时触发,用来弹出菜单
  38. */
  39. @Override
  40. public boolean onCreateOptionsMenu(Menu menu) {
  41. /*
  42. * MenuInflater getMenuInflater():得到菜单填充气对象
  43. * MenuInflater.inflate();执行填充操作
  44. * R.menu.main:将菜单界面定位到res/menu/main.xml
  45. *
  46. * R.menu.main:访问R.java中中的静态内部类menu中的静态成员main,
  47. * 对应的资源文件在res/menu/main.xml
  48. */
  49. getMenuInflater().inflate(R.menu.menu_main, menu);
  50. return true;
  51. }
  52. @Override
  53. public boolean onOptionsItemSelected(MenuItem item) {
  54. int id = item.getItemId();
  55. //noinspection SimplifiableIfStatement
  56. if (id == R.id.action_settings) {
  57. return true;
  58. }
  59. return super.onOptionsItemSelected(item);
  60. }
  61. }

布局文件解释
HelloWorld 布局界面如图
文件路径: project视图下,app/src/main/res/layout/activity_main.xml

img

代码如下:

  1. <!--
  2. RelativeLayout :表示当前界面使用的是相对布局
  3. xmlns:android="http://schemas.android.com/apk/res/android":代表当前相对布局的命名空间,命名空间
  4. 一般都放在根元素的开始标签的位置
  5. android:layout_width="match_parent":当前界面的布局宽度(layout_width)为匹配父容器(match_parent)
  6. android:layout_height="match_parent":当前界面的布局高度(layout_height)为匹配父容器(match_parent)
  7. android:paddingLeft:"@dimen/activity_horizontal_margin":表示该控件内部左边留有@dimen/activity_horizontal_margin的间隔大小,此处引用了R.java文件下dimen静态类的activity_horizontal_margin变量,对应res/valuses/dimens.xml <dimen name="activity_horizontal_margin">16dp</dimen>
  8. name对应的值,即16dp
  9. -->
  10. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  11. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  12. android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
  13. android:paddingRight="@dimen/activity_horizontal_margin"
  14. android:paddingTop="@dimen/activity_vertical_margin"
  15. android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  16. <!--
  17. TextView:文本控件,相当于label控件
  18. android:layout_width="wrap_content":当前TextView控件的布局宽度为包裹内容(内容有多宽,这个TextView控件就多宽)
  19. android:layout_height="wrap_content":当前TextView控件的布局高度为包裹内容(内容有多高,这个TextView控件就多高)
  20. android:text="@string/hello_world":当前TextView显示的内容为@string/hello_world;
  21. @string/hello_world:代表引用R.java文件中的string静态内部类中的hello_world静态成员;
  22. 对应的资源在res/values/strings.xml中的
  23. <string name="hello_world">Hello world!</string>
  24. name="hello_world"这个键对应的内容:Hello world!
  25. -->
  26. <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
  27. android:layout_height="wrap_content" />
  28. </RelativeLayout>

main.xml菜单文件详解
文件路径: project视图下,app/src/main/res/menu/menu_main.xml

  1. <!--
  2. menu:菜单文件的根元素;
  3. xmlns:android="http://schemas.android.com/apk/res/android":菜单文件的命名空间
  4. -->
  5. <menu xmlns:android="http://schemas.android.com/apk/res/android"
  6. xmlns:app="http://schemas.android.com/apk/res-auto"
  7. xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
  8. <!--
  9. item:表示其中一个菜单项
  10. android:id="@+id/action_settings":表示给菜单项提供一个id,id的值为:@+id/action_settings
  11. @+id/action_settings:表示在R.java文件中生成一个静态内部类id(如何在R.java文件中本来没有静态内部类id)
  12. 并且在id的静态内部类中生成一个静态成员常量action_settings;
  13. android:orderInCategory="100":菜单的排序号
  14. android:title="@string/action_settings":菜单的文本(title)为@string/action_settings
  15. @string/action_settings:表示引用R.java文件中的string静态内部类的静态常量action_settings;
  16. 对应的资源值在res/values/strings.xml中的
  17. <string name="action_settings">Settings</string>
  18. name="action_settings"的值Settings
  19. -->
  20. <item android:id="@+id/action_settings" android:title="@string/action_settings"
  21. android:orderInCategory="100" app:showAsAction="never" />
  22. </menu>

AndroidManifest.xml详解
文件路径: project视图下,app/src/main/AndroidManifest.xml
AndroidManifest为APP的配置信息如下,已经加入了注释说明

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 根节点必须为manifest-->
  3. <!-- 应用程序的主包名,唯一标识这个APP-->
  4. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  5. package="com.example.shiyanlou.myapplication" > >
  6. <!-- application节点,一些APP的基本设置-->
  7. <!-- icon设置App的图标-->
  8. <!-- label设置APP的标签,即App名字-->
  9. <!-- theme设置App的主题-->
  10. <application
  11. android:allowBackup="true"
  12. android:icon="@drawable/ic_launcher"
  13. android:label="@string/app_name"
  14. android:theme="@style/AppTheme" >
  15. <!-- activity节点,对应一个Activity-->
  16. <!-- name activity的包名加路径,前面的主包名可以不写-->
  17. <!-- label activity的标签-->
  18. <activity
  19. android:name=".MainActivity"
  20. android:label="@string/app_name" >
  21. <!-- 过滤器-->
  22. <!-- action name android.intent.action.MAIN 表示App启动时的第一个Activity-->
  23. <!-- category name android.intent.category.LAUNCHER表示在桌面建立图标-->
  24. <intent-filter>
  25. <action android:name="android.intent.action.MAIN" />
  26. <category android:name="android.intent.category.LAUNCHER" />
  27. </intent-filter>
  28. </activity>
  29. </application>
  30. </manifest>

程序运行说明

为什么程序自动启动MainActivity
在我们的HelloWorld项目的功能清单文件中以前配过如下内容:

  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>

因此android系统发现com.example.shiyanlou.myapplication.MainActivity被匹配成功,通过意图过滤器intent-filter中的配置进行匹配的.这样就会找到activity标签对应的android:name属性的值:com.example.shiyanlou.myapplicationMainActivity;之后将会实例化这个MainActivity类,实例化之后会自动调用它的onCreate方法,完成activity的初始化工作.

在androidstudio中查看运行结果是通过Android下的Logcat查看的,如下图
可选择log级别
img

可过滤log
img

设置过滤添加(可自行添加Log标签)
img

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注