Android入门学习笔记

Android

参考书籍《第一行代码:Android 第2版》

语言:java

1、基础

新建项目选绿的Empty view Activity

目录结构(project)

App:项目中的代码、资源等内容

Build: 编译中自动生成的文件

Libs:放第三方jar包

AndroidTest:测试用例,用于自动化测试

Java:放java代码

Res:在项目中使用到的所有图片、布局、字符串等资源

AndroidMainfest.xml:整个Android项目的配置文件,注册四大组件的配置文件,添加权限声明等。

Build:编译中自动生成的文件

65==、、、、、、、、、、、Gradle:配置文件

layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
    <Button
        android:id="@+id/button_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"
        tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

注册

AndroidManifest.xml

 <activity
            android:name=".FirstActivity"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

Toast

相当于弹出的提醒消息

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 view) {    //执行监听器中的onClick方法
                Toast.makeText(FirstActivity.this, "You clicked Button_1", Toast.LENGTH_SHORT).show();  //3个参数:对象、文本内容、显示时长
            }
        });
    }

2、活动

  • 基本用法

  • 启动活动

  • 传递数据

  • 活动的生命周期

  • 活动的启动模式

  • 实际开发中的实践技巧

intent

各组件之间进行交互的一种方式,用于启动活动/服务/发送广播。

显示intent

在FirstActivity中,在FirstActivity这个 活动基础上打开SecondActivity活动。

public void onClick(View view) {
                Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }

隐式intent

指定action和category等信息,交由系统分析这个intent 找到合适的活动启动。

配置action和category:(匹配上就能响应intent)

        <activity android:name=".SecondActivity"
            tools:ignore="DuplicateActivity"
            android:exported="true">
            <intent-filter>
            <action android:name="com.example.activitytest.ACTION_START"/>
            <category android:name="android.intent.category.DEPAULT"/>
            </intent-filter>
        </activity>

FirstActivity:

直接传action字符串,category在调用startActivity()方法时默认添加。

public void onClick(View view) {
                Intent intent=new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }

启动其他程序的活动:

            public void onClick(View view) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }

向下一个活动传递数据

重载putExtra(键,值)。

返回数据给上一个活动

stratActivityForResult() :启动活动,在获得销毁时能返回结果给上一个活动。 好像已经没了。

setResult(向上一个活动返回处理结果,把带有数据的intent传递回去) :专门用于向上一个活动返回数据

在SecondActivity中按back键返回怎么向First传递数据? 在Second中重写onBackPressed()

启动模式

启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。

3、UI

xml中编写界面

常用控件

使用语法:在layout->activity_main.xml中,给控件定义一个id,指定宽度高度,加入该控件特有的属性

1、TextView :显示一段文本信息

2、Button

可以在MAinActivity中为 Button点击事件 注册(匿名类/接口方式注册)一个监听器。

3、EditText :允许用户在控件里输入和编辑内容,并对这些内容进行处理

hint:输出时显示提示性文本

4、ImageView:展示图片

图片放在drawable目录下(在res中新建drawable-xhdpi)。

setImageResource(新图片) :修改图片为新图片

5、PrograssBar:显示进度条

控件的可见属性:所有的Android控件都具有这个属性,可以通过android:visibility进行指定,可选值有3种:visible、invisible和gone。

  • visible表示控件是可见的,这个值是默认值,不指定android:visibility时,控件都是可见的。

  • invisible表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。

  • gone则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.GONE这3种值。

6、AlertDialog:弹出警告信息的对话框

7、ProgressDialog:弹出带进度条的对话框

8、ScrollView:滚动查看内容

4种基本布局

1、LinearLayout线性布局:把布局包含的控件线性排列。可以按比例指定控件大小。

2、RelativeLayout相对布局:通过(相对于父布局/控件)定位指定控件位置

3、FrameLayout帧布局:默认在左上角

4、百分比布局:需要添加依赖。

、自定义布局

新建一个自己的布局.xml -> 在main.xml里加一行include把自定义布局引进来

自定义控件

在main.xml中,和添加普通控件一样,但需要指定控件的完整类名

ListView控件

实现页面滚动翻阅。

1、简单实现

①在布局文件中加入ListView控件

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int data;
        ArrayAdapter<String> adapter= new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_lst_item_1,data); //data的数据类型没法传到ListView,要用适配器
        //android.R.layout.simple_lst_item_1 是内置的布局文件
        ListView listview=(ListView) findViewById(R.id.list_view);
        listview.setAdapter(adapter);   //将构建好的适配器对象传进去,建立和数据和ListView的联系
    }
2、优化
3、提升运行效率

① getView()方法中的convertView参数,将加载好的布局进行缓存。

② ViewHolder对控件的实例进行缓存。

4、点击事件

setOnItemClickListener() 为ListView注册一个监听器。

OnItemClick()方法:通过position参数判断出用户点击的是哪个子项。

RecyclerView

更厉害的滚动控件,优化了ListView。

需要添加依赖。 implementation ("androidx.recyclerview:recyclerview:1.1.0")

可以设置横向滑动、瀑布滑动等。

点击事件

没有监听器方法,要自己给View注册点击事件view.OnClickListener()。

实践 UIBestPractice

Nine-Patch图片

把图片放入res->drawable里,右键图片选择creat 9-patch file

4、碎片

基本使用

1、创建布局文件.xml,一个文件定义一个碎片的布局

2、新建类继承Fragment,类内重写Fragment的onCreateVdiew()方法,在方法中通过LayoutInflate()方法把刚刚定义的布局动态加载进来

3、最后在activity_main.xml中通过<fragment 标签把碎片添加进来

动态添加碎片

activity_main.xml中,weidth='0dp',weight='1'可以让布局铺满整个屏幕

replaceFragmet():将碎片替换成新碎片

1、创建待添加的碎片实例。 2、 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到。 3、开启一个事务,通过调用beginTransaction()方法开启。 3、 向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。 4、提交事务,调用commit()方法来完成

返回栈: addToBackStack().按back键返回上一个碎片而不是直接退出。

碎片与活动之间通信:

fidFragmentById(),在活动中获取碎片的示例,然后可以调用碎片里的方法。

getActivity() 碎片通过调用这个方法得到和当前碎片相关联的活动的示例,调用活动里的方法。

碎片和碎片通信:碎片调用活动,活动调用碎片

5、广播

6、数据存储

文件存储:二进制字符文本等

SharedPreferences存储:键值对

SQLite数据库存储:大型复杂关系型数据

SQLite

SQLiteOpenHelper帮助类,重写onCreate()和onUpgrade()方法。两个示例方法。

LitePal

开源数据库框架(开源库)。

1、创建数据库:定义一个book类,后续要添加标就添加一个类,<mapping>配置在list标签下,LitePal.getDatabase()方法

CURD时book类要继承DataSupport类,创建一个book实例后对表进行操作。

2、添加数据:.set()设置数据,.save()

3、更新数据:.set(),.updateAll()执行更新操作

对列设置默认值:.setToFault()

4、删除数据:DataSupport.deletAll(表,删除的约束条件)

5、查询数据:DataSupport.findAll(表) 返回的是list而不是Cursor对象

查询定制:select(), where(), order(), limit(), offset()

6、调用原生查询:DataSupport.findBySQL() 返回Cursor对象

7、共享数据

访问内容提供器中共享的数据。

CURD和SQLite语法相同,但是不接受表名接收uri

创建自己的内容提供器:ContentProvider类,重写全部的6个方法,<provider>注册

8、手机多媒体

通知

NotificationManager 管理通知,Notification.builder() 创建Notification对象,NotificationManager.notify(id,Notification对象)把通知显示出来。

getSystemService()方法接收一个字符串参数用来确定获取哪个服务。

Notification对象有5个设置方法。

实现通知点击效果:PendingIntent。像Intent一样可以指明某个意图和启动活动服务,相当于延迟执行的Intent。

获取PendingIntent示例的方法:getActivity() / getBroadcast() / getService()

Notification.Builder().setContentIntent(pi)

对通知进行取消:

Notification.Builder().setAutoCancel() 或 manager.cancel(通知的id)

通知的震动、声音、LED灯等

通知显示长文字/长图片:Notification.Builder().setStyle()方法

setpriorit()设置优先级

摄像头和相册

播放

播放音频:MedaiPlayer类

播放视频:VdoeView类

9、网络技术

访问网络要在xml中声明权限。

WebView控件

显示网页

OkHttp网络通信库

网上传输数据的格式

XML

解析XML格式数据的方式:

1、Pull解析:parseXMLWithPull()

2、SAX解析:新建1个类继承自DefaultHandler,重写父类的5个方法。

JSON

1、官方提供的JSONObject:parseJSONWithJSONObject()

2、谷歌开源库 GSON:添加依赖,把JSON定义一个类加入字段

3、第三方开源库

java回调机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值