@stepbystep
2015-01-18T09:47:38.000000Z
字数 8843
阅读 19470
Android
(说明) 实验楼环境中已经配置好了桌面启动图标
每次切换到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后就设置成功了
点击File->open
在弹出的对话框中选择我们要打开的项目,一般是Android Studio的工程的话,前面会有一个Android Studio的logo
关于打开Eclipse下面的工程,可以参考如下网址
http://www.cnblogs.com/bluestorm/p/3757402.html
android studio下面设置了三中工程视图(Project、 Packages、Android),如下:
默认打开后为Android视图, 而Packages视图如下
Project视图是最全面的视图,如下
在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表示使用了第三方的包
切换到Project视图
**说明,在android studio中,所有的引用和类型等都可以通过按住Ctrl键,点击鼠标左键定位到被引用的位置。如下图,**
此后就会跳转到activity_main.xml文件。
在app目录下,build.gradle文件如下
文件路径: project视图下,app/build.gradle
apply plugin: 'com.android.application'android {// 编译器选择的版本compileSdkVersion 14buildToolsVersion "21.1.1"// 默认配置defaultConfig {// 应用程序包名applicationId "com.example.shiyanlou.myapplication"// 最小的版本,即手机需要13的sdk才能运行minSdkVersion 15// 目标sdktargetSdkVersion 21// app 版本号versionCode 1// app 版本名versionName "1.0"}// build 配置,暂不用管buildTypes {release {minifyEnabled falseproguardFiles 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)中进行注册,注册方式为:* <activityandroid: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);不能省略,它用于保存恢复现场*/*@Overrideprotected 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);}/*** 在用户单击手机上的菜单键时触发,用来弹出菜单*/@Overridepublic 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;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();//noinspection SimplifiableIfStatementif (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的主题--><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!-- activity节点,对应一个Activity--><!-- name activity的包名加路径,前面的主包名可以不写--><!-- label activity的标签--><activityandroid: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项目的功能清单文件中以前配过如下内容:
<activityandroid: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标签)