Android基础学习【Android】
- 前言
- 版权
- 推荐
- 开源
- Android基础学习
- 第一章 Android初体验
- 1-1 Android开发概述
- 1-2 Android开发工具
- 1-3 第一个Android应用
- 第二章 UI组件
- 2-1 布局管理器
- 2-1-1 LinearLayout
- 2-1-2 RelativeLayout
- 2-2 TextView
- 2-3 Button
- 2-4 EditText
- 2-5 RadioButton
- 2-6 复选框CheckBox
- 2-7 ImageView
- 2-8 列表视图 ListView
- 2-9 网格视图 GridView
- 2-10 滚动视图 ScrollView
- 2-11-1 RecyclerView (一)
- 2-11-2 RecyclerView (二)
- 2-11-3 RecyclerView (三)
- 2-11-4 RecyclerView (四)
- 2-12 WebView
- 第三章 UI组件之弹出组件
- 3-1 Toast
- 3-2 AlterDialog
- 3-3 ProgressBar & ProgressDialog
- 3-4 自定义Dialog
- 3-5 PopupWindow
- 第四章 不可不会的Activity和Fragment
- 4-1-1 Activity创建三部曲
- 4-1-2 Activity的生命周期
- 4-1-3 Activity的跳转和数据传递
- 4-1-4 Activity的4种启动模式
- 4-2-1 Fragment详解(一)
- 4-2-2 Fragment详解(二)
- 4-2-3 Fragment详解(三)
- 4-2-4 Fragment详解(四)
- 第五章 必须深刻理解的Android事件处理
- 5-1 基于监听的事件处理机制
- 5-2 基于回调的事件处理机制
- 5-3 源码剖析,了解View的事件分发
- 5-5 Handler消息处理
- 第六章 动画
- 属性动画
- 第七章 数据存储
- 7-1 SharedPreferences 轻量数据存储
- 7-2 File
- 7-2-1 Android存储概念
- 7-2-2 File 内部存储
- 7-2-3 File 外部存储
- 第八章 广播
- 8-1 LocalBroadcastManager
- 附:按压水波纹效果
- 最后
前言
2024-5-29 21:41:04
推荐
【天哥】Android开发视频教程最新版 Android Studio开发
图片资源来自:
https://github.com/jinjungle/skypan-yes-code
开源
日星月云 / 安卓基础学习: https://gitee.com/jsss-1/android-basic-learningjsss-1 / android-basic-learning: https://github.com/jsss-1/android-basic-learning
Android基础学习
第一章 Android初体验
1-1 Android开发概述
- Android是Google开发的操作系统
- Android开发是移动应用开发的表现形式之一
Android、iOs、H5 App、Native+H5、RN、ionic、MUI…
1-2 Android开发工具
Eclipse
- 下载安装JDK
- 为什么使用Android Studio ?
Android Studio是Google自己推出的Android集成开发工具
且Google已经停止对Eclipse的支持。
1-3 第一个Android应用
运行第一个程序
第二章 UI组件
2-1 布局管理器
LinearLayout:线性布局
RelativeLayout:相对布局
2-1-1 LinearLayout
最常用属性
属性 | 解释 |
android:id | id |
android:layout_width | 宽度 |
android:layout_height | 高度 |
android:layout _margin | 镶边 |
android:layout_padding | 填充 |
android:orientation | 排列 |
android:background | 背景 |
2-1-2 RelativeLayout
最常用属性
和LinearLayout对比,新增的属性
属性 | 解释 |
android:layout_toLeftOf | 在…左边 |
android:layout_toRightOf | 在…右边 |
android:layout_alignBottom | 和…底部对齐 |
android:layout alignParentBottom | 和父空间底部对齐 |
android:layout_below | 在…下边 |
2-2 TextView
- 文字大小、颜色
- 显示不下使用…
- 文字+icon
- 中划线、下划线
- 跑马灯
2-3 Button
- 文字大小、颜色
- 自定义背景形状
- 自定义按压效果
- 点击事件
2-4 EditText
- 常用属性
- 监听事件
- 制作登录界面
2-5 RadioButton
- 常用属性
- 自定义样式
- 监听事件
2024-6-3 00:45:01
2-6 复选框CheckBox
2024-6-3 15:39:16
- 常用属性
- 自定义样式
- 监听事件
2-7 ImageView
- Button的其他行生控件:ToggleButton、Switch
- 常用属性
- 加载网络图片
scaleType
- fitXY:撑满控件,宽高比可能发生改变
- fitCenter:保持宽高比缩放,直至能够完全显示
- centerCrop:保持宽高比缩放,直至完全覆盖控件,裁剪显示
https://github.com/bumptech/glide
2-8 列表视图 ListView
- 常用属性
- Adapter
- 演示Demo
acticity_listview.xml
layout_list_item.xml
2-9 网格视图 GridView
- 常用属性
- Adapter
- 演示Demo
GridViewActivity
MyGridViewAdapter
activity_gridview.xml
layout_grid_item.xml
2-10 滚动视图 ScrollView
- 垂直滚动:ScrollView
- 水平滚动:HorizontalScrollView
子元素只能有一个
activity_main.xml
2-11-1 RecyclerView (一)
RecyclerView能够灵活实现大数据集的展示,视图的复用管理比ListView更好,能够显示列表、网格、瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能。
但是使用起来会稍微麻烦一点,并且没有类似ListView的onItemClickListener监听事件,需要开发者自己实现。
新版不用加
使用的是这个
androidx.recyclerview.widget.RecyclerView
LinearAdapter
LinearRecyclerViewActivity
RecyclerViewActivity
activity_linear_recycler_view.xml
activity_recycler.xml
layout_linear_item.xml
2-11-2 RecyclerView (二)
- 水平滚动
- 网格布局
HorAdapter
HorRecyclerActivity
activity_hor_recycler.xml
layout_hor_item.xml
GridAdapter
GridRecyclerActivity
activity_grid_recycler.xml
layout_grid_recyclerview_item.xml
2-11-3 RecyclerView (三)
- 瀑布流
PuRecyclerActivity
StaggeredGridAdapter
layout_staggered_grid_recyclerview_item.xml
activity_pu_recycler.xml
2-11-4 RecyclerView (四)
- 不同的ViewHolder
- XRecyclerView:addHeadView、addFootView、下拉刷新、上拉加载
LinearAdapter
layout_linear_item.xml
layout_linear_item_2.xml
2-12 WebView
- 加载网页加载URL(网络或者本地assets文件夹下的html文件)
- 加载html代码
- Native和JavaScript相互调用
加载网络URL
- webview.loadUrl( “http://www.tiantiantech.cn” );
加载assets下的html文件
- webview.loadUrl( “file:///android_asset/test.html”);
加载html代码
- webview.loadData();
- webview.loadDataWithBaseURL();
网页的前进后退
- webview.canGoBack()
- webview.goBack()
- webview.canGoForward()
- webview.goForward()
- webview.canGoBackOrForward(int steps)
- webview.goBackOrForward(int steps)
按下返回键,默认是退出当前Activity,如果希望是WebView内页面后退
第三章 UI组件之弹出组件
3-1 Toast
- Toast是一个消息提示组件
- 设置显示的位置
- 自定义显示内容(示例:添加一个图片)
- 简单封装
ToastActivity
activity_toast.xml
ToastUtil
3-2 AlterDialog
- 默认样式
- 单选样式
- 多选样式
- 自定义
DialogActivity
activity_dialog.xml
layout_dialog.xml
3-3 ProgressBar & ProgressDialog
ProgressActivity
activity_progress.xml
3-4 自定义Dialog
CustomDialog
CustomDialogActivity
bg_custom_dialog.xml
activity_custom.xml
layout_custom_dialog.xml
3-5 PopupWindow
2024-6-8 15:33:52
PopupWindowActivity
activity_popup_window.xml
layout_pop.xml
第四章 不可不会的Activity和Fragment
这章的界面LifeCycle、Jump、Fragment在UI界面的GridView和RecyclerView中间
4-1-1 Activity创建三部曲
- 新建类继承Activity或其子类
- 在AndroidManifest中声明
- 创建layout并在Activity的onCreate中设置
TestActivity
activity_test.xml
AndroidManifest.xml设置Activity属性
- android:theme=“test” 标签
- android:theme="@style/Theme.AppCompat.Light.NoActionBar"无,可以application中设置
- android:screenOrientation=“portrait” 竖屏显示
- android:launchMode=""启动模式
- intent-filter设置启动Activity
4-1-2 Activity的生命周期
LifeCycleActivity
4-1-3 Activity的跳转和数据传递
- 显式跳转和隐式跳转
- Activity之间的数据传递
- startActivityForResult:启动Activity,结束后返回结果
AActivity
BActivity
activity_a.xml
activity_b.xml
4-1-4 Activity的4种启动模式
Activity的android:launchMode属性
- standard:标准模式,默认
- singleTop:Task栈顶复用模式
- singleTask:Task栈内复用模式
- singleInstance:全局单例模式
standard
Activity是由任务栈管理的,每启动一个Activity,就会被放入栈中,按返回键,就会从栈顶移除一个Activity。
standard是默认的启动模式,即标准模式。每启动一个Activity,都会创建一个新的实例。
taskid:任务栈
hash:实例
默认的栈名称:包名
可以通过android:taskAffinity=".asdfghjkdfghj"
,设置栈名称,必须前面有个.
设置android:launchMode为standard
测试:在A中点击跳转到A
现象:创建了不同的实例
测试:在A中点击jump跳转到B
现象:创建了不同的实例
(视频中B是onNewIntent,是因为他的BActivity.onCreate()信息写错了,应该是onCreate)
singleTop
当要启动的目标Activity已经位于栈顶时,不会创建新的实例,会复栈用顶的Activity,并且其onNewntent()方法会被调用;
如果目标Activity不在栈顶,则跟standard一样创建新的实例。
设置android:launchMode为singleTop
测试:在A中点击跳转到A,再跳转到B
现象:跳转到A,hash码一致,在栈顶,所以复用实例
singleTask
在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Activity,并调用其onNewIntent()方法,并且该Activity上面的Activity会被清除;如果栈中没有,则创建新的实例。
没有演示
singleInstance
全局复用,不管哪个Task栈,只要存在目标Activity,就复用。每个Activity占有一个新的Task栈。
不经常使用
2024-6-8 19:55:05
4-2-1 Fragment详解(一)
2024-6-9 22:18:01
- Fragment有自己的生命周期
- Fragment依赖于Activity
- Fragment通过getActivity()可以获取所在的Activity;Activity通过FragmentManager的findFragmentById()或findFragmentByTag()获取Fragment
- Fragment和Activity是多对多的关系
AFragment
BFragment
ContainerActivity
activity_container.xml
fragment_a.xml
fragment_b.xml
4-2-2 Fragment详解(二)
- Fragment中getActivity()为null的问题
- 向Fragment传递参数
4-2-3 Fragment详解(三)
- Fragment回退栈
开始测试
进入AFragment中
点击跳转BFragment
点击返回
直接到了UI界面了
addToBackStack
放到回退栈中
测试一
进入AFragment中,打印---onCreateView----
点击跳转BFragment
点击返回
返回到AFragment,打印---onCreateView----
再点击返回
直接到了UI界面了
打印---onCreateView----
说明:实例是同一个实例,但是视图会重新创建
测试二
进入AFragment中
点击替换文字,A变为新文字
点击跳转BFragment
点击返回
返回到AFragment,但是文字还原了
但是我们希望是改变之后的状态
replace是remove和add的组合操作
先隐藏A再把B添加,放到回退栈中
进入AFragment中,打印---onCreateView----
点击替换文字,A变为新文字
点击跳转BFragment
点击返回,没有打印---onCreateView----
返回到AFragment,是替换后的状态
就是hide替代replace,因为hide不是清空只是隐藏,从而实现了堆叠效果,所以返回时能回退到非重置状态
4-2-4 Fragment详解(四)
- Fragment和Activity的通信
公共方法
回调接口
公共方法编写步骤
1在ContainerActivity
中写一个公共方法setData
2在AFragment
中直接调用((ContainerActivity) getActivity()).setData("你好");
回调接口编写步骤
1在AFragment
中编写接口IOnMessageClick
,声明方法onClick
2ContainerActivity
实现AFragment.IOnMessageClick
,变重写onClick
3在AFragment
中onAttach
中关联Activity listener = (IOnMessageClick) context;
4AFragment
中调用listener.onClick(“你好”);
2024-6-10 00:05:48
第五章 必须深刻理解的Android事件处理
2024-6-10 15:08:32
这章的界面在main界面中
当用户在应用界面上执行各种操作时,应用程序需要为用户的动作提供响应,这种响应的过程就是事件处理。
5-1 基于监听的事件处理机制
监听三要素
Event Source(事件源)
Event(事件)
Event Listener(事件监听器)
示例1:
事件源:btnTestEvent
事件监听器:new View.0nclickListener()
示例2:
事件源:btnTestEvent
事件:MotionEvent event
事件监听器:new View.onTouchListener()
实现监听事件的方法:
- 通过内部类实现
- 通过匿名内部类实现
- 通过事件源所在类实现
- 通过外部类实现
- 布局文件中onClick属性(针对点击事件)
给同一事件源添加多个同种类型监听器会怎样?
最后一个生效,后面会覆盖前面,但是布局实现认为是最先设置的
EventActivity
MyClickListener
activity_event.xml
5-2 基于回调的事件处理机制
- 回调机制与监听机制的区别
- 基于回调的事件传播
回调机制:先从控件本身开始回调,然后到Activity的回调
因为是return false,继续传播,没有消费停止
如果是return true,就是消费完成,不需要传播了
如果设置监听器
他会优先执行监听器中的方法,然后再是回调
都是return false的结果
总结:
优先监听,然后回调
监听是最后一个设置生效
回调是从控件内部开始的
MyButton
EventActivity
activity_event.xml
5-3 源码剖析,了解View的事件分发
- dispatchTouchEvent->setOnTouchListenert->onTouchEvent
- onClick/onLongClick来自onTouchEvent的处理
dispatchTouchEvent->setOnTouchListenert->onTouchEvent
dispatchTouchEvent:入口方法
setOnTouchListener:监听器onTouch
onTouchEvent:回调
setOnClickListener:监听器onClick
源码dispatchTouchEvent:这个是父类View中的方法(需要下载源文件)
onClick/onLongClick来自onTouchEvent的处理
onTouchEvent:ACTION_DOWN
源码总结:
如果手指按下,100ms内有ACTION_UP,就是点击事件Click
如果再过400ms,手指没有离开,就是长按事件LongClick
要在ACTION_MOVED,没有划出界面
setOnLongClickListener:
如果return false;还会执行setOnClickListener
如果return true;就不会执行setOnClickListener
5-5 Handler消息处理
这个界面在Event中
主要用途
- 未来某时做某事
to schedule messages and runnables to be excuted as some
point in the future - 线程间通信
to enqueue an action to be performed on a different thread
than you own
HandlerActivity
activity_handler.xml
2024-6-10 17:19:02
第六章 动画
这个在P41视频中
属性动画
属性动画:真正改变了属性的值
- ValueAnimator
- ObjectAnimator.ofFloat()
propertyName:动画类型参数的值:translationX translationY alpha rotation rotationX…
ObjectAnimActivity
activity_object_anim.xml
2024-6-11 20:39:22
第七章 数据存储
2024-6-10 20:55:08
7-1 SharedPreferences 轻量数据存储
- Xml文件,K-V形式
- SharedPreferences
- SharedPreferences.Editor
实例化
读操作
写操作
文件目录
/data/data/<applicationId>/shared_prefs
applicationId:默认是包名
DataStorageActivity
SharedPreferencesActivity
activity_data_storage.xml
activity_shared_preferences.xml
7-2 File
- 利用Java的I/O流
7-2-1 Android存储概念
2024-6-10 21:55:54
7-2-2 File 内部存储
2024-6-11 16:57:13
- FileOutputStream FileInputStream
7-2-3 File 外部存储
save
read
第八章 广播
8-1 LocalBroadcastManager
只在应用内广播
只是演示广播的实现
这个场景:两个相邻页面传递信息
可以使用
发送广播
注册组件
接收广播
安全处理:
页面销毁之后,取消注册
BroadActivity
BroadActivity2
activity_broad1.xml
activity_broad2.xml
2024-6-11 20:39:22
附:按压水波纹效果
如果是直角的
TextView 代码如下
如果按钮是圆角的
这样的效果按压纹是直角的
btn_green_round.xml
如果想要圆角按钮,按压纹也是圆角的话。
需要ripple
标签:水波纹效果
ripple_btn_wechat.xml
TextView 代码如下:
WaveActivity
btn_green_round.xml
ripple_btn_wechat.xml
activity_wave.xml
2024-6-11 21:27:20
最后
2024-6-11 21:30:49
迎着日光月光星光,直面风霜雨霜雪霜。