第一行代码—Android第二版学习笔记

第一章 概述

1.1安卓系统架构

Android系统是基于Linux内核的,大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层、应用层。
1.Linux内核层:为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、等
2.系统运行库层:通过一些C/C++库来为Android系统提供了主要的特性支持。同时这一层还有Android运行时库,主要提供了一些核心库,能够允许开发者使用Java语言编写Android应用。同时还包含了Dalvik虚拟机(5.0后改为ART运行环境,专门为移动设备定制的)
3.应用框架层:主要提供了构建应用程序时可能用到的各种API
4.应用层:所有安装再手机上的应用程序都是属于这一层

1.2Android四大组件

分别是活动、服务、广播接收器、内容提供器

1、活动:是所有Android应用程序的门面,应用中能看到的东西都是放在活动中的
2、服务:在后台运行,即使用户退出应用,服务仍然是可以继续运行
3、广播接收器:允许应用接收和发送广播消息
4、内容提供器实现:应用程序之间共享数据

1.3项目结构

1分在这里插入图片描述

  1. .gradle和.idea:都是AS自动生成的一些文件
  2. .app:项目中的代码与资源等内容几乎都放置在该目录
  3. build 包含编译时自动生成的文件
  4. gradle 包含了gradle wapper的配置文件
  5. .gitignore 将指定的目录或文件排除在版本控制之外
  6. build.gradle 项目全局的gradle构建脚本
  7. gradle.properties 全局的gradle配置文件
  8. gradlew和gradlew.bat 用于在命令行执行gradle命令
  9. ActivityTest .iml 标识此项目是IntelliJIDEA项目(AS基于此开发)
  10. local. properties 指定本机中Android SDK路径
  11. settings.gradle 指定项目中所有引入的模块

1.4app目录结构

在这里插入图片描述
1、build:类似于外层build目录,主要包含编译时自动生成的文件
2、libs:存放第三方jar包,会被自动添加到构建路径里面
3、androidTest:编写Android Test测试用例,可以对项目进行一些自动化测试
4、java:存放所有Java代码
5、res:项目中所有图片、布局、字符串等资源存放在此目录
6、AndroidMainfest.xml 整个Android项目的配置文件,程序中定义的四大组件都需要在这个文件里注册
7、test:用于编写Unit Test测试用例
8、.gitignore,将app模块内的制定目录排除在版本控制之外
9、.app.iml:IDEA自动生成的文件
10、build.gradle app模块的gradle构建脚本
11、proguard-rules.pro 用于制定项目代码的混淆规则

1.5 项目运行原理

AndroidMainfest.xml


```css
<activity
            android:name=".FirstActivity"
            android:label="This is FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />//以上两行表示FirstActivity是该项目的主活动
            </intent-filter>
        </activity>

FirstActivity.java

public class FirstActivity extends AppCompatActivity {
   
	//活动创建时必定要执行的方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);//引入布局
    }
}

first_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"
        />
</LinearLayout>

1.6 res目录详解

1.res目录
在这里插入图片描述
drawable开头的文件夹用来存放图片;(如果只有一种分辨率图片,就存放在drawable-xxhdpi文件夹)
mipmap开头的文件夹用来存放应用图标;
values开头的文件夹用来存放字符串、样式、样色等配置
layout文件夹用来存放布局文件

如res/values/strings.xml文件

<resources>
    <string name="app_name">ActivityTest</string>
</resources>

在代码中通过R.string.ActivityTest获得字符串的应用
在XML中通过@string/ActivityTest获得字符串的应用

1.7日志工具的使用

方法名称 对应级别 说明 快捷输入
Log.v() verbose 意义最小的日志信息 logv
Log.d() debug 调试信息 logd
Log.i() info 重要的数据 logi
Log.w() warn 警告信息 logw
Log.e() error 程序中的错误信息 loge

方法中传入两个参数,第一个参数是tag(一般是当前类名),第二个参数是msg,打印具体的内容
tip:使用logt可以以当前类名生成一个TAG常量(为当前类的静态属性)

第二章 活动

2.1 创建基本活动

1.创建活动流程(附带一个简单的button)
创建活动文件->创建Layout文件->在AndroidMainFest注册(AS会自动注册)以及配置
FirstActivity.java对应修改部分

@Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1 = (Button) findViewById(R.id.button_1);//创建按钮,参数为res中注册的id
        button1.setOnClickListener(new View.OnClickListener() {
   
        	//注册button的监听器
            @Override
            public void onClick(View v) {
   
                Toast.makeText(FirstActivity.this,  "You clicked Button 1",
                        Toast.LENGTH_SHORT).show();//makeText创建Toast对象,参数为context对象、显示的文本内容、显示的时长
            }
        });
    }

first_layout.xml对应修改部分

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button_1"
        android:layout_width="match_parent" <!--当前元素和父元素一样宽-->
        android:layout_height="wrap_content" <!--当前元素高度只要能刚好包含里面的内容-->
        android:text="Button 1"<!--设置显示的文字内容-->
        />
</LinearLayout>

AndroidManifest.xml对应修改部分

<activity
            android:name=".FirstActivity"
            android:label="This is FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <!--这两行代码配置主动活动-->
            </intent-filter>
        </activity>

2、创建带menu的活动
在res中创建menu文件夹,再创建main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>
</menu>

item标签创建具体的菜单项,再指定标识符与名称
FirstActivity.java修改部分

@Override
    public boolean onCreateOptionsMenu(Menu menu){
   
        getMenuInflater().inflate(R.menu.main,menu);//getMenuInflater能创建MenuInflater对象和调用inflate方法为当前活动创建菜单,参数一表示通过哪一个资源文件创建菜单、参数二指定菜单项所要传入的Menu对象
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
   
        //设置菜单响应事件
        switch (item.getItemId()){
   
            case R.id.add_item:
                Toast.makeText(this,"you clicked add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"you clicked remove", Toast.LENGTH_LONG).show();
                break;
            default:

        }
        return true;
    }

tips:使用ctrl+o可以显示可覆盖的方法列表

2.2 使用Intent在活动之间跳转

2.2.1使用显示和隐式Intent

1.使用显示Intent
首先创建第二个活动,命名为SecondActivity
然后更改FirstActivity的覆盖方法

@Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);  
                startActivity(intent);
            }
        });
    }

2.使用隐式Intent
修改AndroidManifest.xml

<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值