Android基础第一天

作者: lengol | 来源:发表于2016-02-07 13:20 被阅读773次

    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(); }});
                
      }
    

    }

    相关文章

      网友评论

        本文标题:Android基础第一天

        本文链接:https://www.haomeiwen.com/subject/cxsykttx.html