您的位置:首页 > 移动开发 > Android开发

Android Studio初步使用及HelloWorld详解

2015-10-12 09:28 726 查看
好文章必须转。传送门:https://www.zybuluo.com/stepbystep/note/63311


Android Studio初步使用及HelloWorld详解

Android


Android Studio初步使用及HelloWorld详解
Android Studio初步配置
设置环境变量
设置主题和字体

Android Studio常用功能说明
打开工程
Android Studio工程视图
Android Studio的工程结构

HelloWorld详解
程序运行说明


Android Studio初步配置


设置环境变量

(说明) 实验楼环境中已经配置好了桌面启动图标
 

每次切换到android studio的安装目录,启动程序会很麻烦,linux下可以很简单的设置环境变量

// 修改用户环境变量

gedit ~/.bashrc


打开的文件中最后一行下添加如下内容
/opt/android-stuido
为android studio的安装目录 
export PATH=/opt/android-stuido/bin:$PATH
 

启用环境变量, 在终端输入

source ~/.bashrc


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

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

studio.sh &



设置主题和字体

设置主题 

有的人喜欢IDE是黑色的,看起来比较Geek,在Android中可以简单的设置这样的主题 

进入Android studio后,点击File->Settings 



进入设置界面,输入Appearance 



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



设置字体 

为了方便查看,我们在实验楼的环境下还是采用白天的主题 

同样进入File->Settings选项之后,输入fonts,就可以设置字体了 



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



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




Android Studio常用功能说明


打开工程

点击File->open 



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



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


Android Studio工程视图

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



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



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




Android Studio的工程结构

在Project视图下,我们可以看到完整的目录结构 

- .idea主要包含了一些项目的元数据的存储
- **app为项目的主要目录**
图示说明




- 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配置文件。


build为项目的生成目录

gradle为项目的Gradle配置信息

Android Studio 采用Gradle来管理项目,是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。

bulid.gradle文件主要为项目的Gradle的版本
// Top-level build file where you can add configuration options common to all sub-projects/modules.


buildscript {

repositories {

jcenter()

}

dependencies {

classpath

// 此处就是设置Gradle版本的地方

'com.android.tools.build:gradle:1.0.0'


// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

}

}


allprojects {

repositories {

jcenter()

}

}


External Libraries为外部库 

第一行
<Adnroid API 21 PlatForm>
表示当前Android 的选择的编译Android API是哪个 

第二行
<1.7>
 表示使用的JDK 为1.7的版本 

第三行
support annotations-21.0.3
表示使用了第三方的包


HelloWorld详解

切换到Project视图

**说明,在android studio中,所有的引用和类型等都可以通过按住Ctrl键,点击鼠标左键定位到被引用的位置。如下图,**
 


 

此后就会跳转到activity_main.xml文件。

在app目录下,build.gradle文件如下 

文件路径: project视图下,app/build.gradle

apply plugin: 'com.android.application'

android {

// 编译器选择的版本

compileSdkVersion 14

buildToolsVersion "21.1.1"


// 默认配置

defaultConfig {

// 应用程序包名

applicationId "com.example.shiyanlou.myapplication"


// 最小的版本,即手机需要13的sdk才能运行

minSdkVersion 15

// 目标sdk

targetSdkVersion 21

// app 版本号

versionCode 1

// app 版本名

versionName "1.0"

}


// build 配置,暂不用管

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}


// 外接的包需要在下面添加

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:21.0.3'

}


在src/main/java/com.example.shiyanlou.myaplication目录下,MainActivity.java 

主界面注释解释

package com.example.shiyanlou.myapplication;


import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;


/**

* 自定义Activity类,要求必须继承android.app.Activity;

* 此处因为新建的时候选择了BlankActivity,默认继承ActionBarActivity

* 由于Activity是android四大组件(Activity(活动),Service(服务),

* BroadcastReceiver(广播接收者),Content Provider(内容提供者))之一, 因此必须在功能清单文件(AndroidManifest.xml)中进行注册,注册方式为:

*   <activity

android:name="com.example.shiyanlou.myapplication.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>

*/

public class MainActivity extends ActionBarActivity {


/**

* onCreate在Activity被创建时被调用,而且只调用一次,主要用来完成初始化工作

* 需要注意的是,此时的super.onCreate(savedInstanceState);不能省略,它用于保存恢复现场

*/

*

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

/*

    * 将Activity到用户界面设定为R.layout.activity_main,即

    * res/layout/activity_main.xml

    * 可在build/generated/source/r/debug/com../R.java下查看layout静态内部类中的activity_main的静态成员

    * 对应的是res/layout/activity_main.xml*/

setContentView(R.layout.activity_main);

}


/**

* 在用户单击手机上的菜单键时触发,用来弹出菜单

*/

@Override

public boolean onCreateOptionsMenu(Menu menu) {

/*

   *  MenuInflater getMenuInflater():得到菜单填充气对象

   *  MenuInflater.inflate();执行填充操作

   *  R.menu.main:将菜单界面定位到res/menu/main.xml

   *  

   * R.menu.main:访问R.java中中的静态内部类menu中的静态成员main,

   * 对应的资源文件在res/menu/main.xml 

   */

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}


@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();


//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {

    return true;

}


return super.onOptionsItemSelected(item);

}

}


布局文件解释 

HelloWorld 布局界面如图 

文件路径: project视图下,app/src/main/res/layout/activity_main.xml



代码如下:

<!--

RelativeLayout :表示当前界面使用的是相对布局


xmlns:android="http://schemas.android.com/apk/res/android":代表当前相对布局的命名空间,命名空间

一般都放在根元素的开始标签的位置


android:layout_width="match_parent":当前界面的布局宽度(layout_width)为匹配父容器(match_parent)


android:layout_height="match_parent":当前界面的布局高度(layout_height)为匹配父容器(match_parent)


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>

name对应的值,即16dp


-->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


<!--

TextView:文本控件,相当于label控件

android:layout_width="wrap_content":当前TextView控件的布局宽度为包裹内容(内容有多宽,这个TextView控件就多宽)


android:layout_height="wrap_content":当前TextView控件的布局高度为包裹内容(内容有多高,这个TextView控件就多高)


android:text="@string/hello_world":当前TextView显示的内容为@string/hello_world;

@string/hello_world:代表引用R.java文件中的string静态内部类中的hello_world静态成员;

对应的资源在res/values/strings.xml中的

<string name="hello_world">Hello world!</string>

name="hello_world"这个键对应的内容:Hello world!

   -->


<TextView android:text="@string/hello_world" android:layout_width="wrap_content"

android:layout_height="wrap_content" />


</RelativeLayout>


main.xml菜单文件详解 

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

<!--

menu:菜单文件的根元素;


xmlns:android="http://schemas.android.com/apk/res/android":菜单文件的命名空间

-->

<menu xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">

<!--

item:表示其中一个菜单项


android:id="@+id/action_settings":表示给菜单项提供一个id,id的值为:@+id/action_settings

@+id/action_settings:表示在R.java文件中生成一个静态内部类id(如何在R.java文件中本来没有静态内部类id)

并且在id的静态内部类中生成一个静态成员常量action_settings;


android:orderInCategory="100":菜单的排序号


android:title="@string/action_settings":菜单的文本(title)为@string/action_settings

@string/action_settings:表示引用R.java文件中的string静态内部类的静态常量action_settings;

对应的资源值在res/values/strings.xml中的

<string name="action_settings">Settings</string>

name="action_settings"的值Settings

   -->

<item android:id="@+id/action_settings" android:title="@string/action_settings"

android:orderInCategory="100" app:showAsAction="never" />

</menu>


AndroidManifest.xml详解 

文件路径: project视图下,app/src/main/AndroidManifest.xml 

AndroidManifest为APP的配置信息如下,已经加入了注释说明

<?xml version="1.0" encoding="utf-8"?>

<!--根节点必须为manifest-->

<!--应用程序的主包名,唯一标识这个APP-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.shiyanlou.myapplication" > >


    <!--application节点,一些APP的基本设置-->

    <!--icon设置App的图标-->

    <!--label设置APP的标签,即App名字-->

    <!--theme设置App的主题-->

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >


        <!--activity节点,对应一个Activity-->

        <!--name activity的包名加路径,前面的主包名可以不写-->

        <!--label activity的标签-->

<activity

android:name=".MainActivity"

android:label="@string/app_name" >


            <!--过滤器-->

            <!--action name android.intent.action.MAIN 表示App启动时的第一个Activity-->

            <!--category name android.intent.category.LAUNCHER表示在桌面建立图标-->

<intent-filter>

<action android:name="android.intent.action.MAIN" />


<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>


</manifest>



程序运行说明

为什么程序自动启动MainActivity 

在我们的HelloWorld项目的功能清单文件中以前配过如下内容:

<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>


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

在androidstudio中查看运行结果是通过Android下的Logcat查看的,如下图 

可选择log级别 



可过滤log 



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android studio 结构