好文章必须转。传送门:https://www.zybuluo.com/stepbystep/note/63311
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为外部库
第一行
表示当前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 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)中进行注册,注册方式为:
*
android:name="com.example.shiyanlou.myapplication.MainActivity"
android:label="@string/app_name" >
*/
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
代码如下:
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">
android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
main.xml菜单文件详解
文件路径: project视图下,app/src/main/res/menu/menu_main.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
- android:id="@+id/action_settings" android:title="@string/action_settings"
android:orderInCategory="100" app:showAsAction="never" />
AndroidManifest.xml详解
文件路径: project视图下,app/src/main/AndroidManifest.xml
AndroidManifest为APP的配置信息如下,已经加入了注释说明
xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.shiyanlou.myapplication" > >
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >
android:name="android.intent.action.MAIN" />
android:name="android.intent.category.LAUNCHER" />
为什么程序自动启动MainActivity
在我们的HelloWorld项目的功能清单文件中以前配过如下内容:
android:name=".MainActivity"
android:label="@string/app_name" >
android:name="android.intent.action.MAIN" />
android:name="android.intent.category.LAUNCHER" />
因此android系统发现com.example.shiyanlou.myapplication.MainActivity被匹配成功,通过意图过滤器intent-filter中的配置进行匹配的.这样就会找到activity标签对应的android:name属性的值:com.example.shiyanlou.myapplicationMainActivity;之后将会实例化这个MainActivity类,实例化之后会自动调用它的onCreate方法,完成activity的初始化工作.
在androidstudio中查看运行结果是通过Android下的Logcat查看的,如下图
可选择log级别
可过滤log
设置过滤添加(可自行添加Log标签)