Android基础第一天

day01 英语****
Generation 一代人;代(约30年),时代
icon 图标
Libraries:c代码库
 OpenGL:图形快速显示,游戏开发
 webkit:浏览器内核
 Android Runtime
 Dalvik VM:虚拟机,android代码运行在此虚拟机
 运行时调用Libraries C代码库
 Application Framework中间介,java代码,调用底层c代码
n.构架;框架;(体系的)结构;机构,组织
 Applications原生的应用程序:浏览器、桌面、联系人等

eclipse就是存放编译器的目录。
sdk为Android提供的软件开发工具包,

SDK Manager.exe就是sdk管理工具,下面会介绍。
sdk目录为:

异常cause by 事件方法无参数。 方法私有啦

andorid eclipse 路径的配置
JAVA_HOME D:\software\jdk1.8.0_25
path %JAVA_HOME%/bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\


今天的知识
一。安卓发展史

3G
4G 4th -Generation ,速度可达到100Mbps以上,可以在线观看高清视频,上传下载大批量数据。4g: lte , long time evolution
5G 5th - Generation, 速度可达到1Gbps以上,几乎满足人们的所有需求。
二。android的版本
2.3 具有NFC 近场通信技术
3.0 具平板设计

三。Android 操作系统架构 (重点)
Android架构

 application 运用层 (java开发)
        浏览器、桌面、联系人
  
 application  framework  运用框架层 (java开发+JNI)
  
  (JNI   java  native interface 呈上其下 )

Libraties  函数库 (c/c++开发)  和       Android Runtime  虚拟器层  
   OpenGL:图形快速显示,游戏开发        Dalvik VM:虚拟机,android代码运行
  webkit:浏览器内核

Linux Kernel : linux 硬件内核驱动层 (c开发 )

   用于安全管理、内存管理、进程管理、电源管理、硬件驱动

四。两种虚拟机的不同

 1.基于的架构不同: jvm 基于栈(位于内存的一个空间,执行指令需要寻找cpu的地址 )    
             DVM 基于寄存器(CPU的一个组成部分,不需寻找Cpu地址,直接运行执行)

2.执行的文件的格式不同: JVM 一次执行多个.class文件,运行慢
DVM 一次运行 将多个.class文件编成一个.dex文件 执行 ,运行快

五。 ART 与 DVM
ART 不需转换代码,直接预编译成机器码,效率高
优点:程序无需转换, 运行速度块,
缺点: 占用内存大,

DVM  运行慢 卡顿

六;Android 开发环境的搭建
1.匹配 Android JDK 要匹配位数 32 64
2.
3. adt-bubdle : android develpement tools bubdle 安卓开发工具集
eclipse
sdk
SDK Manager 在此翻墙下载一些新的API文档

 4. plamform的 apilevel   19   4.4版本
                           18   4.3
                           11   3.0
                           10   2.3
                           8    2.2
5  plamform-tools  
                aapt.exe  android application package tool 安卓运用包工具  
                adb.exe    建立电脑与手机之间的链接
                 dx.bat  讲多个.class文件打包成一个.dex文件

七, SDK下的目录
add-ons 预留的一个附加目录
build-tools 构建工具目录
docs SDKAPI参考文档,所有的API都可以在这里查到。
extras 开发中额外提供的一些工具及jar
platforms 不同版本android的核心jar包
platforms-tools 平台一些相关的工具
soursce 原码
system-images:系统镜像文件
tools:开发中使用的一些工具,如9path,做图片拉伸适配

八:Android Manager 介绍

九:模拟器的简介及创建
Device 常用的分辨率
3.2----- QVGA ------320480
3.7=====WVGA=========480
800
4.7------WXGA-------1280*720

十 DDMS

  1. dalvik debug manager system:delvik调试管理系统
    |--Devices 显示当前电脑所连接的所有android设备
    显示 android设备运行的进程
    |--Debug小蜘蛛 用来调试程序用的
    |--Start Method Profiling 开始方法的分析 分析某个操作,某个方法的性能
    |--Stop Process 停止进程,可以结束一个应用进程,杀死应用,清理缓存。
    |--Screen Capture 屏幕捕获,可以给连接上的设备截屏。

  2. File Explorer:文件系统 列出当前设备所有目录。
    dataapp: 自己安装的应用程序apk文件存放的目录,
    |-- data-data:应用的私有目录,系统每安装一个新的应用程序,都会在此目录创建该应用包名的文件,用来存放该应用的私有数据,当应用卸载时,该包名的文件夹也会被删除。
    |--mnt-sdcard:SD卡目录
    |--system-->app:系统应用程序apk文件存放的目录
    十一:
    部署运行的三种方式:

    1. 右击工程 run as
    2. 工具栏的按钮
    3. 快捷键:ctrl+F11

    dalvik debug manitor service

十二: android工程目录结构
src 源代码

gen  自动申城的文件目录,不能修改
 |----Builder
  |---R.java  里面有很多的内部类   是对资源文件的一个索引

Android4.3 
  |-- android.jar  属性可修改版本等级 (只要一个)

Android Dependencie 第三方jar包

assets 资产目录 用来存放程序运行过程中需要的一些工具

bin
  |--dexeLibs
  |--res
    
   |---res  
             drawable-hdpi  存放图片资源
               layout    布局资源
                menu   菜单资源
               activity_main.xml
            |--values
                           dimens.xml   封装长度
                           String.xml   封装字符串
                           type.xml      封装样式
          |--values-zh  value还可国际化   自建 国际化资源  中国的 
           |--values-en  美国的

     AndroidMainfest.xml  清单文件  
                            程序的入口,action:main 主要的   category  Lancher   启动 发射 
                            包名
                            图片图标
                             版本名
                             运用名
                           
                         package   包名   唯一标示
                         versionCode  
                  minsdkVersion  运用程序安装的最低版本  
     
           引用一张图片     @文件夹/图片
                           @draw    

图片命名规则: 不能字母大写,中文命名, 数字开头

activity.java

 oncreate   是activity启动时调用,
activty 可还以配置运用程序的使用  权限 

<uses-permission android:name="android.permission.CALL_PHONE"/>

十三:android 打包过程
.java
------jdk------->.class
-----dx.bat------>一个.dex 联合 res assets androidmanifest.xml
-----aapt------>.apk
---签名认证jarsigner---- ->final.apk 上市

   任何一个apk都需要签证才能上市, 

十四:adb命令行操作
android debug bridge 调式桥 建立手机与电脑直接的连接 adb运行的端口号是5037
1.环境变量的配置:path C:\kaifa\adt-bundle-windows-x86_64_20140101\sdk\platform-tools
2.指令
adb devices 列出当前电脑连接的android设备桌面

  adb pull phone_paht  pc_path :  将手机端(设备)文件  拉到  电脑里  // pull 拉 托


  adb push pc_path  phone_path   将电脑文件 倒到手机里 
        

    adb install [-r] apkpath    电脑的文件(记事本)  安装到手机上  -r 强制安装
    adb  install   -r   C:\user]Administrator\Desktop\com.HonestNotebook.apk

     adb uninstall packagename; 从手机卸载一个应用程序

DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk

           adb  kill-server      关闭调式桥
          adb  start-server   开启调式桥
  
   adb端口号占用的问题   
      netstat -oan     查看 adb的端口号 被那个进程占用啦  
                                     在启动任务管理器里找到该进程,把其关掉,然后重启cmd就行啦
                  
       adb shell   进入当前设备linux环境下
 
     案列
--> adb shell
      进入私有文件目录
     --> root@android:/ # cd data/data/com.itheima.filePermission

           +ls -l    查看当前设备的目录结构
     -->root@android:/data/data/com.itheima.filePermission # ls -l
     
       drwxrwx--x u0_a48   u0_a48            2015-08-31 02:04 cache
        drwxrwx--x u0_a48   u0_a48            2015-08-31 02:04 files
        drwxr-xr-x system   system            2015-08-31 02:04 lib
     
   进入文件 files的目录
   ----> root@android:/data/data/com.itheima.filePermission # cd files
        进入文件 files的目录结构
 --->root@android:/data/data/com.itheima.filePermission/files # ls -l

            -rw-rw---- u0_a48   u0_a48         18 2015-08-31 02:04 append.txt
            -rw-rw---- u0_a48   u0_a48         18 2015-08-31 02:04 private.txt
            -rw-rw-r-- u0_a48   u0_a48         18 2015-08-31 02:04 read.txt
            -rw-rw--w- u0_a48   u0_a48         18 2015-08-31 02:04 write.txt      
      使用 linux的指令 chmod 更改私有文件的权限
        输入 # chmod  要成为的权限(十进制)   修改的私有文件
     ---> # chmod 764 append.txt 
      ---> # ls -l

-rwxrw-r-- u0_a48 u0_a48 18 2015-08-31 02:04 append.txt (权限发生了改变-rw-rw----为-rwxrw-r--)
-rw-rw---- u0_a48 u0_a48 18 2015-08-31 02:04 private.txt
-rw-rw-r-- u0_a48 u0_a48 18 2015-08-31 02:04 read.txt
-rw-rw--w- u0_a48 u0_a48 18 2015-08-31 02:04 write.txt

         adb shell +ls -l    查看当前设备的目录结构

       adb shell+logcat    查看系统运行中的日志信息(错误信息)
  
 注意  如果当前电脑连接多态android设备,需要指定操作的当前是那台android设备。
        要在 adb后加 -s 设备序列号

十五.案列:电话拨号器(重点)
1.需求分析文档,设计UI原型图
2.UI工程师 设计UI界面
3.架构师 写架构,写接口文档
4.码农 客户端
A写布局界面
1.res/layout/activity_main.xml 布局控件代码 搭建界面需要控件有:TextView控件(请输入电话号码)、EditText控件(xxx号码)、Button(呼叫此号码)

B 写业务逻辑 MainActivity.java

                       1. 通过布局文件中对控件配置的id,在activity中获取控件的对象
                             findViewById(int id)
                          2.   为按钮设置点击事件,当点击Button时发生事件  获取EditText中文本内容,号码
           bt_callphone.setOnClickListener( new  OnClickListener(){public void onClick(View v){syso(....);}}  
                            3.在点击事件的onclick方法中,获取用户输入的电话号码 
                                  //获取EditText extends TextView 对象的文本内容 
                  String strNumber=et_number.getText().toString().trim();
                 4.创建一个意图Intent对象   向 电话拨号器发送意图拨打电话   
                          Intent intent = new Intent();
                    5..为Intent对象设置一个打电话的动作
                    intent.setAciton(Intent.ACTION_CALL);
                  6.为Intent对象设置一个数据,告诉意图对象具体做什么事
                       intent.setData(Uri.parse("tel:"+strNumber));
                  7.启动Intent对象,执行以上动作
                    startActivity(intent);

            8.在androidmanifest.xml中设置一个打电话的权限
                 <uses-permission android:name="android.permission.CALL_PHONE"/>
                          
       5.测试工程师   测试运用          

十六.按钮的四种点击事件 crl+shift+g 看事件是否引控件用

方法一:使用匿名内部类实现点击事件,但对于多个按钮的点击事件比较臃肿

btn_call.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
EditText et_number = (EditText)
findViewById(R.id.et_number);
String number = et_number.getText().toString().trim();
// 获取文本框的内容
if ("".equals(number)) {

// context 上下文 duration 显示土司的时长
//这里不用MainActivity.this, 要用 mcontext // private Context mcontext // mcontext=this

Toast.makeText(mcontext, "号码不能为空", Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent(); // 创建意图对象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
});

方法二:内部类来实现 定义一个内部类MyButtonListener 实现接口OnClickListener,重写OnClick(View v)方法

private class MyButtonListener implements OnClickListener {

@Override
public void onClick(View v) {
EditText et_number = (EditText)
findViewById(R.id.et_number);
String number =
et_number.getText().toString().trim();
// 获取文本框的内容
if ("".equals(number)) {
Toast.makeText(mcontext, "号码不能为空", Toast.LENGTH_LONG).show();
return;
}
System.out.println("number--" + number);
Intent intent = new Intent();
// 创建意图对象
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
}

//方法三 使用switch选择语句 实现N多个按钮的点击事件 ,这种方法最优,开发经常用
//但是MainActivity要实现OnClickListener接口 ,重写Click(View v)方法

public class MainActivity extends Activity implements OnClickListener {
private Button bt_01;
private Button bt_02;
private Button bt_03;
private Context mcontext;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        
            mcontext=this;

使用switch选择语句 实现N多个按钮的点击事件

     //但是MainActivity要实现OnClickListener接口 ,重写Click(View v)方法
    bt_01.setOnClickListener(this); 
    bt_02.setOnClickListener(this); 
    bt_03.setOnClickListener(this); 
    
  }

private void callphone() {
    //3.获取用户输入的电话号码
    String number = bt_01.getText().toString().trim();//通过EditText获取该控件上显示的文本内容
    //4.拨打电话号码
    Intent intent = new Intent();//创建一个意图对象; 奴隶,打电话
    intent.setAction(Intent.ACTION_CALL);//设置意图对象的动作,打电话
    intent.setData(Uri.parse("tel:"+number));// 设置意图对象的数据,告诉奴隶拨打的电话号码
    startActivity(intent);//去启动一个意图对象
}

对象 View v 有一个方法getId() 获取当前被点击的控件对象的id
@Override
public void onClick(View v) {
int id = v.getId();
switch( id){
case R.id.bt_01: //当点击按钮1时,调用 callphone()方法, 执行拨打电话功能
callphone();
break;

     case R.id.bt_02: //当点击按钮2时,显示按钮02被点击啦
         Toast.makeText(mcontext, "按钮02被点击啦", Toast.LENGTH_SHORT).show();
         break;
     case R.id.bt_03://当点击按钮3时,显示按钮03被点击啦
         Toast.makeText(mcontext, "按钮03被点击啦", Toast.LENGTH_SHORT).show();
         break;}} 

}

1.使用匿名内部类的方式,

        bt_callphone.setOnClickListener(new OnClickListener(){
               
            @Override
            public void onClick(View v) {
             String strNumber=et_number.getText().toString().trim();
                Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_CALL);
                      intent.setData(Uri.parse("tel:"+strNumber));
                          startActivity(intent); } }); 

  
    2. 创建一个子类MyonclickListener实现接口onclickListener, 重写onclick()方法,  设置控件点击事件时传一个类的对象。

             private class MyButtonListener implements OnClickListener {
                                // 当按钮被点击的时候调用
                                @Override
                                public void onClick(View v) {
                                // 3. 获取到 我要拨打的号码 首先我要 找到 文本框
                                EditText et_number = (EditText)
                                findViewById(R.id.et_number);
                                String number =
                                et_number.getText().toString().trim(); // 获取文本框的内容
                                // 判断number 如果号码为空 我弹出一个提示 土司 Toast
                                if ("".equals(number)) {
                                // context 上下文 duration 显示土司的时长
                                Toast.makeText(MainActivity.this, "号码不能为空",
                                Toast.LENGTH_LONG).show();
                                return;
                                }
                                System.out.println("number--" + number);
                                // 4 拨打此号码 意图 干 一件事的想法 打 狗 猫 打代码 打电话
                                Intent
                                Intent intent = new Intent(); // 创建意图对象
                                // 设置要拨打的动作
                                intent.setAction(Intent.ACTION_CALL);
                                // 设置拨打电话号码的数据 uri统一资源标示符 范围要比
                                url定义范围要广定义的语法规则 比较 url
                                // http://www.baidu.com 统一资源定位符
                                intent.setData(Uri.parse("tel:" + number));
                                // 真正的拨打号码 开启意图对象
                                startActivity(intent);
                                }

    3. 让当前类MainActivty实现接口onclickListener,设置控件点击事件时传一个this。这种方式适合按钮比较多的情况,一般在公司采用该方式。

    4. 在布局文件中为控件添加一个onclick属性,在布局对应的Activity中写一个一onclick属性值为名的方法,要public,传一个View类型的参数。比较适合做简单的测试。

十七. 控件布局方式

控件的编号id android:id="@+id/当前控件对象"

1.LinearLayout(线性布局)
<TextView/> 文本框 显示框的内容

     水平线性布局   android:orientation=“horizontal”表示水平方向
  、垂直线性布局      android:orientation=“vertical”表示垂直方向

android: gravity=center/left/right      gravity:对齐方式    子控件以当前控件为参照物的对齐方式 (注:与父窗体界面无关)    
                         
 android: layout_gravity=center/left/right     当前控件以父窗体为参照物的对齐方式 (父窗体可能指手机屏幕,也可能指孙控件的父控件窗体)                                      

android:background="#ffffff" 控件的背景颜色

        android:layout_margintop/Bottom/Right/Left="50dp"    当前控件 与上面/下面/右边/左边  控件 的间距

 android:  padding=10dip  当前控件里面的子控件  与  当前控件的四周间距  

  android:paddingTop="20dp"     当前控件与上面的控件的间隙
android:paddingBottom="20dp"   当前控件与下面的控件的间隙

       android: hint    友情提示,引导你做什么

  android:layout_width="match/fill_parent" 控件的宽填充父窗体
   android:layout_width="wrap_content"     控件的宽被父窗体包裹

 android:layout_height="match/fill_parent"      控件的高填充父窗体
  android:layout_height="wrap_content"          控件的高被父窗体包裹

RelativeLayout(相对布局)都是从左上角开始布局,要控制位置需要 设置 每个控件相对于其他控件的位置。
都是从左上角开始布局,要布局控件的位置就要以其他的控件为参照物

     当前控件相对于另一个控件
     layout _below="@id/bt_center"      当前控件位于哪个控件的下方

     android:layout_above="@id/bt_center"      当前控件位于哪个控件的上方

  android:layout_toLeftOf="@id/bt_center"  当前控件位于那个控件的左边
   android:layout_toRightOf="@id/bt_center"    当前控件位于那个控件的右边
     
      
         layout_alignParentright  当前控件以父窗体(手机界面)为参照物的对其方式

android:layout_centerHorizontal="true":当前控件在父窗体中水平居中
android:layout_centerVertical="true":当前控件在父窗体中垂直居中
android:layout_centerInParent="true": 当前控件位于父窗体的正中间

帧布局 FrameLayout
控件一层一层往上叠加布局

表格布局 TableLayouts

TableRow 此控件代表一行,
 TableRow 此控件代表一列

绝对布局 AbsoluteLayout

-------------------------应用列表界面。

Settings设置-display

*Screentimeout,屏幕超时。超出设置时间,自动锁屏。在4.1中是Sleep选项。

 Package
Name:包名,这个命名要具有一定意义,比如:com.公司名称.xxx
 Minimum Required SDK:工程最低要求运行版本
 Target SDK:最高可运行的版本
 Compile With:编译的版本,一般用较高的版本
 Theme:主题:none即可
注意这里的工程名是01.HelloWorld,这是下边的包名Package
Name会自动生成com.example.1.helloworld,包名中不允许出现数字,所以删掉


Android工程目录结构

 src:源代码。如果最初选择创建Activity,会有一个Activity的子类

 gen:系统自动生成的文件。R.java 中记录了项目中各种资源ID

BuildConfig.java 标记项目是否可以Debug

 Android 4.4

当前工程所使用的SDK类库
 Android Private Libraries
用来支持各个版本的类库
 assets:资源文件
不会在R文件注册,原封不动发布
里面可以放置应用程序依赖的一些文件
如果此文件夹中存放的文件过大,在发布时,上传apk将会很慢。
 bin:编译后的二进制文件
包括class、资源文件、dex、apk、清单文件等
 libs:工程中使用的库
默认带有版本支持的类库,像v4、v7包
 res:系统资源,所有文件都会在R文件生成资源ID
 drawable:图片
 layout:界面布局
 menu:菜单
 values:字符串、样式等数据
 anim:动画
 raw:原生文件
 drawable-hdpi:高分辨率的图片目录
 drawable-ldpi:低分辨率的图片目录
 drawable-mdpi:中分辨率的图片目录
 drawable-xhdpi:大分辨率的图片目录
 drawable-xxhdpi:超大分辨率的图片目录
 AndroidManifest.xml:清单文件
Android中的四大组件(Activity、ContentProvider、BroadcastReceiver、
Service)都需要在该文件中注册
程序所需的权限也需要在此文件中声明,例如:电话、短信、互联网、
访问SD卡。
manifest节点:pakeage:是应用安装的路径data/data的目录,手机上的
应用程序的不能有一样的包名/目录。
 manifest节点:
versionCode:应用程序版本号
versionName:应用程序版本名称
 proguard.cfg:
用来混淆代码的配置文件,防止别人反编译
 project.properties:
标记该项目使用SDK版本号,早期版本名为:default.properties
Android程序部署与启动
 应用程序安装、发布:Package Explorer中右键点击工程 – Run As –
Android Application,快捷键Ctrl+F11
程序启动过程:
 Eclipse将.java源文件编译成.class
 dx工具将所有.class文件转换为.dex文件
 再将.dex文件和所有资源打包成.apk文件
 将.apk文件上传并安装到模拟器,存储在/data/app目录下
 启动程序,开启进程
 根据AndroidManifest.xml文件找到MainActivity类,创建Activity
 Activity创建后执行onCreate(Bundle)方法,根据R.layout.activity_main构建
界面


Android程序部署与启动
 应用程序安装、发布:Package Explorer中右键点击工程 – Run As –
Android Application,快捷键Ctrl+F11
程序启动过程:
 Eclipse将.java源文件编译成.class
 dx工具将所有.class文件转换为.dex文件
 再将.dex文件和所有资源打包成.apk文件
 将.apk文件上传并安装到模拟器,存储在/data/app目录下
 启动程序,开启进程
 根据AndroidManifest.xml文件找到MainActivity类,创建Activity

 Activity创建后执行onCreate(Bundle)方法,根据R.layout.activity_main构建
界面

                    public class MainActivity extends Activity {
                    
                        @Override
                         //oncreate()运用程序界面被创建时调用此方法
                        protected void onCreate(Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);
                            //设置运用程序的UI界面显示调用setContentView()方法
                            /*R是个最终类  能自动生成 ,不能修改 AUTO-GENERATED FILE.  DO NOT MODIFY.
                             * res 是个资源文件夹
                             * R.layout.activity_main  调用.layout文件夹里的activity_main.xml文件,就会显示出虚拟机界面在eclipse里 */
                            setContentView(R.layout.activity_main);
                        }
                    
                    
                      
                    }

 R.layout.activity_main是R类中的一个成员变量,指向res/layout/activity_main.xml文件
 activity_main.xml文件中描述了Activity的布局方式以及界面组件
 解析activity_main.xml,通过反射创建对象,生成界面
Android程

各个关于

关于MainActivity.java 文件 ----activitiy 第一次创建的时候调用

/02_常见布局/src/cn/itheima/flayout/MainActivity.java

public class MainActivity extends Activity {

@Override
 //oncreate()运用程序界面被创建时调用此方法 //运用程序只要一开启就会调用oncreate
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //设置运用程序的UI界面显示调用setContentView()方法
    /*R是个最终类  能自动生成 ,不能修改 AUTO-GENERATED FILE.  DO NOT MODIFY.
     * res 是个资源文件夹
     * R.layout.activity_main  调用.layout文件夹里的activity_main.xml文件,就会显示出虚拟机界面在eclipse里 */

// 加载 activity 需要显示布局
setContentView(R.layout.activity_main);
}

}



关于R.java 文件

/02_常见布局/gen/cn/itheima/flayout/R.java
public final class R
|---- public static final class attr {}

             |---- public static final class dimen {
    
     static final int activity_horizontal_margin=0x7f040000;
     static final int activity_vertical_margin=0x7f040001; } 

              |---- static final class drawable {
    public static final int ic_launcher=0x7f020000;}
              
             |---- public static final class id {
    public static final int action_settings=0x7f080000;}

         |----  static final class layout {
            static final int activity_main=0x7f030000;}

       |---- static final class menu { static final int main=0x7f070000; }
            
       |----  static final class string {
     static final int action_settings=0x7f050001;
      static final int app_name=0x7f050000;
      static final int hello_world=0x7f050002;}

关于activity_main.xml文件

描述了Activity的布局方式以及界面组件

/02_常见布局/res/layout/activity_main.xml

<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:gravity="ceenter_horizontal" // 让控件在界面水平居中

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

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

</RelativeLayout>

//设置控件的id
<EditText android:id="@+id/et_password" />
<EditText android:id="@+id/et_password"/>
<CheckBox android:id="@+id/cb_remember"/>


关于 AndroidManifest.xml 文件
/02_常见布局/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itheima.flayout"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="cn.itheima.flayout.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>
</application>

</manifest>

(4.2前) Dalvik VM 安卓运用虚拟机程序

(4.2后) 新版本 ART 安卓虚拟机运用程序

         1.提高程序运行效率
         2.但是不稳定,耗电量大,占用内存 

2.android开发工具的下载配置
www.andro s 安卓开发工具集
.*下载安卓的ADT的插件 for eclipse
instaling eclispe plugin eclispe插件
*android SDK 开发工具集
eclipse
Android Studio

 *下载 adt-bundle-windows-x86-2013-解压:
       有 eclipse 
           sdk
           SDK Managet.exe
           
             
  * 选 Android 4.1.2(API16)为例 选择 ARM system-images 选择模拟器创建需要的镜像  

android SDK Manger开发环境的目录结构 :下载安装最新的 sdk程序

sdk 包

  1. build-tools 编译需要用到的所有工具,把开发的程序装进手机

  2. docs 开发的离线文档

  3. extras 额外工具,模拟器加速器,向下兼容的jar包
    ---android/ support:存储的是goole开发的新特性jar包
    -----intel /...Mannger(硬件加速管理器)/IntelHaxm.exe 提高电脑inter的运行速度(i3以后处理器)

  4. platforms 开发需要的版本平台,每个平台的android.jar在对应的文件夹里面

  5. platform-tools 开发调试的工具
    ----adb.exe 一个重要的调试桥(连接pc机与手机模拟器)

  6. sources 存储android.jar的源码 goole工程师开发的源代码存于此

  7. system-images 存储各个不同版本模拟器创建需要的镜像

  8. tools 开发辅助需要用到的工具,
    ---emulator.exe 模拟器.exe


手动配置安卓eclipse开发环境
eclipse/window/preferces/Android/输入sdk路径 :找到sdk存储的路径
建立android项目工程
new/Android Applicstion project
或/other/Android/Android Application project

  弹框  
       运用名  Application Name : helloworld
        工程名  project Name:  helloworld
         包名   pakge Name : com.itheima.helloworld
       minimum required SDK :设置即你编写的安卓程序代码 能够安装移植运行的最低版本的安卓手机
                         API 9  Andorid 2.3   安装的程序的最低版本手机是  9(2.3) 9(2.3)以下的版本则不能安装
      
       Target SDK :  设置即你编写的安卓程序代码 能够最高兼容版本的手机 
                      API 21   Andorid 5.0
       
       Compile With : 用..进行编译,即把java代码打包成jar包 装在手机里 
                      API 16   Andorid 4.1 最稳定  

        
   下一页面  
             选 ceate custum lanucher icon  
              选 create activity 
              选 create project in workplace   选择工作空间

    下一页面  创建 create activity
                
                

  eclipse 页面 
               Android virtual Device Manger  安卓虚拟设备 
                  AVD Name : ipone6       
              设备 Device : HVGA 480x320 (小尺寸的 我的点哪配置低,分辨率低)               
                   Target    Android 4.1.2 -APIlevel 16 
                     CPU/ABI   Intel Atom(x86)

              内存   Menory oPtion: Ram:512 不能太大,否则溢出
                                    VM  16                                    
            手机内存卡 Internal Storage  200M
                  外卡  SD Card  32M  
                   Snapshot   开发休眠  不建议选

如何把工程项目部署到安卓的模拟器里那?
右击项目工程/run as/android application

VGA

过去的一种图形显示大小的规范 480*640 标准

QVGA 分辨率 240x320 // Q 1/4
HVGA 480x320 //H 一半
WVGA 480x800
FWVGA 854x480

ADB

adb:android debug bridge 安卓调试桥 (pc与手机相连)
*DOS adb devices

查看链接到电脑上的所有的手机设备。(模拟器,真实的手机)
emlator-5554 device 上线
emlator-5555 offline 没上线
emlator-5556 offline 没上线
如果都显示的是 offline 说明模拟器掉线啦
解决:关掉 adb调试桥,重启adb调试桥
DOS adb kill-server
DOS adb start-devices

  • adb kill-server

杀死adb的调试桥

  • adb start-server

重新启动adb的调试桥

如何把电脑上的一个文件(记事本) 安装到 模拟器(真实的手机)上

  • adb install xxx.apk
    DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk

从手机卸载一个应用程序,参数是应用程序的包名, 打开DDMS,查看应用程序的包名的路径
*DOS adb uninstall 应用程序的包名
DOS adb uninstall C:\user]Administrator\Desktop\com.HonestNotebook.apk

对adb.exe进行环境变量配置,可以在DOS的任意目录下运行
path
;E:\Android SDK\adt-bundle-windows-x86_64_20140101\sdk\platform-tools;


DDMS

dalvik debug manager system dalvik 虚拟机调式系统

1.Devicer 显示手机的各个软件的进程和路径

  1. file Explorer 文件浏览器 上传到电脑和下载数据到手机
    把虚拟机/手机的文件倒到桌面上 点击小标签 pull a file from the device

    如何把电脑的音乐文件倒到手机里 /虚拟机的sdcard卡可以放些歌曲视频文件
    DDM /sdcard 点击右上角按钮 pullafile onto the device 选择电脑的歌曲即可导入到手机里

3.Emulator contor 控制模拟器
可以模拟打电话 发短信

注意:要是Devicer 无进程显示 则模拟器掉线啦

DOS adb kill-server
adb devices


android应用的目录结构(左边)

  1. src文件夹,java源代码
    onCreate()界面被 开启调用该方法

      //设置应用程序显示的ui
     setContentView(R.layout.activity_main);
    
  2. gen目录
    自动生成的文件夹 ,里面保存的是res资源文件的引用

  3. android4.1.2 代表的是引用的android.jar包

  4. libs文件夹
    代码的三方jar包。会自动的被添加到android.dependencies目录下
    如何把jar包添加进libs里去

  5. android dependencies 开发依赖的jar包

  6. bin
    编译生成的临时文件和二进制文件和上传到虚拟机的apk文件都在bin里。会自动生成的

  7. res目录

    • drawable-ldpi 运用程序的自身使用的图片。 low 低分辨率 小图
    • drawable-mdpi middle 中等分辨率
    • drawable-hdpi high高分辨率
    • drawable-xhdpi x加大高分辨率
    • drawable-xxhdpi 加大再加大的分辨率
    • layout 用xml文件编写的布局
    • menu 菜单文件夹
      -values 里有个string.xml文件,代表程序的字符串资源,打开可以修改代码内容
  8. AndroidManifest.xml

清单文件,配置应用程序的版本,图标,名称等重要信息。


android应用程序开发的步骤

1.设置空间布局 res-->layout文件夹 修改xml布局文件(即修改UI的文档代码),修改按钮

  1. src目录 -->编写MainActivity.java文件的代码
  2. 找到关心的控件,我就要添加什么控件
    view findViewById(int id);
    View button= findViewById(R.id.bt_call)
    4.控件是按钮对象button 设置点击事件动作 Intent setAction(String action) 方法 并获取数据 Intent setDate(int data)方法

intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel://15671307215"));

  1. 记得添加权限。 涉及隐私 注册拨打电话权限android.permission.CALL_PHONE

关于控件的 一系列、
TextView
EditText
Button

控件的id
<TextView android:id="@+id/textView1"/>
<EditText android:id="@+id/et_number"/>
<Button android:id="@+id/btn_call" />

控件的 事件
android:onClick="getPrivateFile"
android:onClick="read"
android:onClick="write"

Android常见布局

  1. 线性布局 LinearLayout 按线排列
    重要参数
    1.1朝向 orientation = horizontal水平朝向 或 vertical垂直朝向
    android:orientation="vertical" 控件垂直朝向
    android:orientation="horizontal" 控件水平朝向布局

1.2
width 宽度 控制控件在父窗体里面显示的比例。
---->weight=fill/match_parent 我的布局填充占满父窗体(虚拟机界面)
--->也可以weight=“160px”宽占整个界面的一半
height 高度 控件布局在窗体里 显示的高度比例
--> height =warp_parent 控件布局部分填充父窗体(被父窗体包裹)
--> 也可以 height =“160px” 高整个界面的一半
<Button/EditText
android:layout_width="match_parent" //高布局占满
android:layout_height="warp_parent" //宽布局部分填充界面
android:orientation="vertical/horizontal" />//控件布局 水平或垂直朝向

1.3 weight 指此按钮占整个界面的百分比重
<Button
android:layout_width=" 0dp"
-- weight 指此按钮占整个界面的百分比重 2 此按钮占 正整个界面的2/3、
android:layout_width=" 2"
android:layout_weight="2"
android:text="按钮01"
/>
<Button
android:layout_width=" 0dp"
-- weight 指占整个界面的百分比重 1 此按钮占 正整个界面的1/3、
android:layout_weight=" 1"
android:layout_height="wrap_content"
/>

  1. 相对布局 Relate Layout :找准参照物
    要不一个按钮控件带 带有 Parent 就是与父窗体(手机界面)相关,此空间属性 不需要id,属性直接true flase
    以父窗体为参照物进行布局
    要不一个按钮控件 如果没带Parent ,此控件的属性 就要有id,是以某个控件的id编号为参照物,进行布局
    正中间按钮, 有个 id编号,以此按钮为参照物
    <Button
    //为正中间的按钮定义了一个id 编号 "@+id/bt_middle"
    //在R文件里一保存就会在class id 类里生成一个 常量 int bt_minddle=0x7f070000;
    android:id="@+id/bt_middle"

     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
                             center  Horizontal="true" 按钮控件水平居中 
     android:layout_centerHorizontal="true"
                              centerInParent="true"  按钮空间垂直居中
          //centerInParent="true" 按钮控件在父窗体的正中间
     android:layout_centerInParent="true"
     android:layout_centerVertical="true"
     android:text="正中间按钮" />
    
    在中间按钮的上方按钮 ,以中间按钮的编号为依据android:layout_above="@id/bt_middle"
    

    <Button
    android:layout_width="wrap_content "
    android:layout_height="wrap_content"
    //此按钮在 中间按钮 的上方 //layout_above
    android:layout_above="@id/bt_middle"
    android:layout_centerHorizontal="true"
    android:text="↑上方按钮" />

    在中间按钮的下方按钮 以中间按钮的编号为依据 android:layout_below="@id/bt_middle"
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    //此按钮在 中间按钮 的下方 //layout_below
    android:layout_below="@id/bt_middle"
    android:layout_centerHorizontal="true"
    android:text="↓" />

  在中间按钮的左方按钮    以中间按钮的编号为依据  android:layout_toLeftOf="@id/bt_middle"
 <Button   
                //toLeftOf  控件左边布局
     android:layout_toLeftOf="@id/bt_middle"
     android:layout_centerVertical="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="←" />
  
 在中间按钮的下右方按钮    以中间按钮的编号为依据  android:layout_toRightOf="@id/bt_middle"
  <Button          
                    //toRightOf  控件右边布局
     android:layout_toRightOf="@id/bt_middle"
     android:layout_centerVertical="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="→" />
   

     凡是控件带有 Parent 就是与父窗体(手机界面)相关,此空间属性 不需要id,属性直接true flase
     如果没带Parent ,此控件的属性 就要有id,以某个控件的id为参照物,进行布局
       
  此按钮在父窗体 最左上角。 与中间的按钮控件 无关,不需要 中间按钮的编号 依据 
  <Button 
       android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                         //alignParentTop="true" 按钮控件与父窗体的最顶部对齐 
      android:layout_alignParentTop="true"
                       //alignParentLeft="true" 按钮控件与父窗体的最左边对齐 
      android:layout_alignParentLeft="true"
      android:text="左上角"
      />
  
     此按钮在父窗体 最左下角  
    <Button 
       android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                        //alignParentBottom  按钮控件与父窗体的最底部对齐
      android:layout_alignParentBottom="true"
                         //alignParentLeft  按钮控件与父窗体的最左边对齐  
      android:layout_alignParentLeft="true"
      android:text="左下角"
      />

      此按钮在父窗体 最右下角  
     <Button 
       android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                         //alignParentBottom  按钮控件与父窗体的最底部对齐
      android:layout_alignParentBottom="true"
                         //alignParentRight  按钮控件与父窗体的最右边对齐  
      android:layout_alignParentRight="true"
      android:text="右下角"
      />
    
     此按钮在父窗体 最右上角  
      <Button 
       android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                        //alignParentTop="true"     按钮控件与父窗体的最顶部对齐 
      android:layout_alignParentTop="true"
                         //alignParentRight  按钮控件与父窗体的最右边对齐  
      android:layout_alignParentRight="true"
      android:text="右上角"
      />

</RelativeLayout>


  1. 帧布局 FrameLayout

div 暂停的图标,显示在界面的中间。
帧布局布局特点:下个(后个)控件布局总是悬浮在前个控件的上方,若下个控件面积大于前个控件的面积,则会覆盖掉前个控件。

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  //帧布局的控件宽高匹配父窗体
android:layout_width="match_parent"
android:layout_height="match_parent" >

 //父窗体是白色底板,TextView就是悬浮在父窗体上的一个 红色画布
<TextView
    android:layout_width="300px"
    android:layout_height="300px"
         //TextView的布局方式:layout_gravity ="center/button/top"//让 TextView居中/低/顶 布局
    android:layout_gravity="center"
    android:background="red" />

   
     // 此控件布局悬浮与上个红色控件的上方。
    <TextView
    android:layout_width="200px"
    android:layout_height="200px"
    android:layout_gravity="center"
    android:background="green" />
    
   // 此控件布局悬浮与上个绿色控件的上方 
    <TextView
    android:layout_width="100px"
    android:layout_height="100px"
    android:layout_gravity="center"
    android:background="blue" />

// 此控件布局悬浮与上个蓝色控件的上方

<TextView
android:layout_width="50px"
android:layout_height="50px"
android:layout_gravity="center"
android:background="yellow" />

</FrameLayout>

  1. 表格布局 TableLayout

表格布局;就是里面有很多的行 TableRow代表行
//第一行 姓名
<TableRow
// TableRow代表行 宽 填充父窗体,高被包裹
android:layout_width="fill_parent"

    android:layout_height="wrap_content" >

    <TextView
        android:layout_width="0px"
        android:layout_weight="2"  //权重 占2
        android:layout_height="wrap_content"
        android:text="姓名:" />

    <EditText
        android:layout_width="0px"
        android:layout_weight="5"  //权重 占5
        android:layout_height="wrap_content"
               //hint 填写
        android:hint="请填写姓名" />
</TableRow>

//第二行 填身份号码
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

    <TextView
        android:layout_width="0px"
        android:layout_weight="2"   //权重 占2
        android:layout_height="wrap_content"
        android:text="身份证号码:" />

    <EditText
        android:layout_width="0px"
        android:layout_weight="5"  //权重 占5
        android:layout_height="wrap_content"
        android:hint="请填写身份证号码" />
</TableRow>

</TableLayout>

  1. 绝对布局 AbsoluteLayout

废弃,不推荐使用。 deprecated 废弃
720p (1280×720)
1080P (1920X1080)


ANDROID 中显示像素问题
为了适应不同分辨率,不同的像素密度,推荐使用dip/dp, 文字使用sp。

px (pixels)像素 就是分辨率
一般HVGA代表320x480像素。该单位不常用. 机顶盒开发可能用.。
px 当界面小分辨率小,控件按钮占的父窗体界面就多,
当界面 分辨率大,控件按钮占的父窗体界面就小,

dip或dp (device independent pixels)设备独立像素
这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
使用dp 像素单位,控件随着界面的大小(分辨率)变化,而自动变化控件大小,但自生的大小不变..占得权重不变。

sp (scaled pixels — best for text size)比例像素,用于字体
主要处理字体的大小,可以根据用户系统的字体自适应。

除了上面三个显示单位,下面还有几个不太常用:
in (inches)英寸
mm (millimeters)毫米
pt (points)点,1/72英寸

为了适应不同分辨率,不同的像素密度,推荐使用dip/dp,文字使用sp。

点击事件的几种写法

  1. 内部类实现onclickListener的接口
    class MainActivity extends Activity implements OnClickListener

  2. 匿名内部类实现onclickListener接口,重写接口的vid OnClick(view v)点击事件方法

  1. 让当前的Activity实现onclickListener的接口

界面的按钮比较多,就要建立很多个内部类对象(对应一个按钮控件),麻烦。
如果通过内部类或者匿名内部类代码比较臃肿。

  1. 在配置文件里布局xml文件里面声明 onclick属性 ="方法名"

           方法一:使用匿名内部类实现点击事件,对于多个按钮的点击事件比较臃肿 
    

public class MainActivity extends Activity {
private Button bt_01;
private Button bt_02;
private Button bt_03;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
     //获取  按钮01的对象  
       Button bt_01=(Button) findViewById(R.id.bt_01);
       //为按钮01设置点击事件 //调用 View setOnClickListener(OnClickListener l); l 是个接口
          //使用接口的匿名内部类
           bt_01.setOnClickListener( new OnClickListener(){
             public void onClick(View v) { Toast.makeText(MainActivity.this, "按钮01被点击啦", 0).show();}});
        
           //获取  按钮02的对象  
           Button bt_02=(Button) findViewById(R.id.bt_02);  
           bt_02.setOnClickListener(new OnClickListener() {
               public void onClick(View v) { Toast.makeText(MainActivity.this, "按钮02被点击啦", 0).show();}});
           
           //获取  按钮03的对象  
           Button bt_03=(Button) findViewById(R.id.bt_03);
            bt_03.setOnClickListener(new OnClickListener() {
             public void onClick(View v) { Toast.makeText(MainActivity.this, "按钮03被点击啦", 0).show(); }});
            
  }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容