参考视频AndroID系统学习的笔记!系统但并非详细!图片并不能直接上传到文档中,如需了解详情请访问:https://www.emperinter.info/2020/10/03/androID-study/
可惜没有网络,Json,xml等等的教程!还有没有6教程这个有点懵圈,自己在B站上找到出处也是没有的,而且B站有多几个教程!
学习的主要来源:
YouTube(不全) | https://www.youtube.com/watch?v=sehxt5wbsgM&List=PLoDvOw64tSYsWvlxk9aIDOGPVrFQeHull
B站(较全) | https://www.bilibili.com/vIDeo/BV1Rt411e76H?p=36
util | 工具类布局linearLayoutGrIDLayoutbutton,VIEw等button 继承自 TextVIEw
EditText 继承自 TextVIEw
ImageVIEwscaleType| 值 | 含义 |
| :------------: | :------------: |
| fitXY | 撑满控件,宽高比可能发生改变 |
| fitCenter | 保持宽高缩放,直至能够完全显示 |
|centerCrop| 保持宽高比缩放,直至完全覆盖控件,剪裁显示|
网络图片 | 第三方库ListVIEw | GrID VIEwScrollVIEwAdapter 写法
分类只能有一个子元素
垂直滚动: ScrollVIEw
水平滚动: horizontalscrollview
RecyclerVIEw(使用较多)linearRecyclerVIEw灵活实现大数据集的展示,视图的复用管理比ListvIEw更好,能够显示列表、网格、瀑布流等形式,且不同的VIEwHoler能够实现item多元化的功能;
分隔线;
点击事件;
开源库:XRecyclerVIEw:addheadVIEw,addFootVIEw,下拉刷新,上拉加载;WebVIEw加载网络
webvIEw.loadUrl("https://www.emperinter.info")本地
webvIEw.loadUrl("file:///adnroID_asset/test.HTML")直接加载HTML代码
webvIEw.load.Data(); //容易出现乱码webvIEw.loadDataWithBaseURL(); //后者编码更好网页的前后进判断能否返回上一级
webvIEw.canGoBack()返回
webvIEw.goBack()能否去前进?
webvIEw.canGoForward()能否前进或返回?
webvIEw.canGoBackOrForward(int steps)steps>0 前进,steps<0 后退 step布
webvIEw.goBackOrForward(int steps)返回键按下返回键,默认是退出当前Activity,如果是WebVIEw内容页面后退
@OverrIDepublic boolean onKeyDown(int kecode,KeyEvent event){ if((keyCode == KeyEvent.KEYCODE_BACK) && webVIEw.canGOBack()){ webVIEw.goBack(); return true; //其它不要处理了! } return super.onKeyDown(keyCode,event);}执行Js代码
参考:最全面总结 AndroID WebVIEw与 Js 的交互方式UI组件d出组件Toast
消息提示组件
设置显示的位置
自定义显示内容(例如:添加一个图片)
简单封装
多次点击,后面把前面给抵消掉,以最后一个为准
AlertDialog | 对话框包装过的Toast
默认样式
单选样式
多选样式
自定义样式
Progressbar & ProgressDialog定义自己的样式 | 其它布局也类似activity_progress.xml<Progressbar androID:ID="@+ID/pb6" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="10dp"/>styles.xml
<style name="MyProgressbar"><item name="androID:indeterminateDrawable">@drawable/load_progressstyle>自定义DiaLogCustomDialog.java
设置屏幕宽度没有采用builder,这里采用的方式可以一直.setTitle().setMessage()模式,返回值不为voID而为CustomDialog模式
//设置宽度WindowManager m = getwindow().getwindowManager();display d = m.getDefaultdisplay();WindowManager.LayoutParams p = getwindow().getAttributes();Point size = new Point();d.getSize(size);p.wIDth = (int)(size.x * 0.8); //设置display的宽度为当前手机屏幕的宽度getwindow().setAttributes(p);自定义按压效果selectorPop-up Window.9图不可不会的Activity和Fragment
Activity的创建三部曲Fragment: 碎片化,依赖于Activity,一个Activity可有多个Fragment!
新建类继承Activity或其子类
在AndroIDManfIEst中声明(可不要)
创建layout并在Activity的onCreate中设置(可不要)
eg:TestActivity
标题改变adnroID:label="Test"
[图片上传失败…(image-69f099-1601732473216)]
取消标题栏[图片上传失败…(image-c83c48-1601732473216)]
<activity androID:name=".MainActivity" androID:theme="@style/Apptheme.NoActionbar"><intent-filter> <action androID:name="androID.intent.action.MAIN" /><category androID:name="androID.intent.category.LAUNCHER" />intent-filter>activity>
[图片上传失败…(image-bdaf62-1601732473216)]
全局无标题<application androID:allowBackup="true" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name" androID:roundIcon="@mipmap/ic_launcher_round" androID:supportsRtl="true" androID:theme="@style/Apptheme.NoActionbar" > ...application>
[图片上传失败…(image-4a8f1a-1601732473216)]
竖屏显示默认自动切换!
[图片上传失败…(image-a6d338-1601732473216)]
<activity androID:name=".MainActivity" androID:theme="@style/Apptheme.NoActionbar" androID:screenorIEntation="portrait"><intent-filter> <action androID:name="androID.intent.action.MAIN" /><category androID:name="androID.intent.category.LAUNCHER" />intent-filter>activity>水平显示
androID:screenorIEntation="landscape"启动模式
androID:launchMode="standard"设为默认的启动
<intent-filter><action androID:name="androID.intent.action.MAIN" /><category androID:name="androID.intent.category.LAUNCHER" />intent-filter>Activity 的生命周期
lifeCycleActivity.java
[图片上传失败…(image-ba8ab4-1601732473216)]
Activity的跳转和数据传递package: jump
显式跳转和隐式跳转
Activity之间的数据传递
startActivitForResult:启动Activity,结束后返回结果
显式跳转//显式跳转 1// Intent intent = new Intent(AActivity.this,BActivity.class);// startActivity(intent);////显式跳转 2// Intent intent = new Intent();// intent.setClass(AActivity.this,BActivity.class);// startActivity(intent);//显式跳转 3// Intent intent = new Intent();// intent.setClassname(AActivity.this,"info.emperinter.AndroIDStudy.jump.BActivity");// startActivity(intent);//显式跳转 4 Intent intent = new Intent(); intent.setComponent(new Componentname(AActivity.this,"info.emperinter.AndroIDStudy.jump.BActivity")); startActivity(intent);intent
Activity 数据传递摄像头、打电话、邮件等等很多与intent有关
startActivityForResult();//回调数据Activity 的4种启动模式(launchMod)
在AndroIDManifest.xml中修改!
<activity androID:name=".jump.AActivity" androID:label="A" androID:launchMode="standard"/>
Activity的androID:launchMode属性standard: 标准模式,默认 | 每启动一个Activity都会创建一个新的实例。代码中的taskID:判断是否为同一栈,hash:判断是否为同一实例;
singletop: Task栈顶复用模式Activity是由任务栈管理的,每启动一个Activity,就会被放入栈中,按返回键,就会从栈顶移除一个Activity
singleTask: Task栈内复用模式当要启动的目标Activity已经位于栈顶时,不会创建新的实例,会复用栈顶的Activity,并且其onNewIntent()方法会被调用;如果目标Activity不在栈顶,则跟standard一样创建新的实例。
在同一个任务栈中,如果要启动的目标Activity已经在栈中(不一定在栈中),则会复用该Activity,并调用其onNewIntent()方法,并且该Activity上面的Activity会被清除;如果栈中没有,则创建新的实例。
singleInstance: 全局单例模式以上两个在同一个栈复用
全局复用,不管哪个Task栈,只要存在目标Activity,就复用。每个Activity占有一个新的Task栈。
任务栈名称:可为多个栈。
androID:taskAffinity="A"
Fragment | 该教程已过时,方法已被弃用2020-10-02 10:40:14 星期五
** 用于实现同一个Activity不同布局的切换!eg:小米运动国际版首页的切换!**
Fragment有自己的生命周期
依赖于Activity
Fragment通过getActivit()可以获取所在的Activity;Activity通过FragmenManager的findFragmentByID()或findFragmentByTag()获取Fragment
Fragment和Activity是多对多的关系
用到的文件ContainerActivity.java
Afragement.java
注意//getSupportFragmentManager().beginTransaction().replace(R.ID.fl_container,bFragment).commitAllowingStateLoss(); getFragmentManager().beginTransaction().replace(R.ID.fl_container,bFragment).commitAllowingStateLoss();
getFragmentManager()与getSupportFragmentManager():
相同:/** * Return the FragmentManager for interacting with fragments associated * with this activity. */
就是说通过上述两种方法获得的FragmentManager是Activity中所包含Fragment的FragmentManager。
不同:getFragmentManager():是Activity中和V4包的Fragment中的方法
getSupportFragmentManager():是FragmentActivity中的方法
问题Fragment中getActivity()为null的问题
向Fragment传递参数
Fragment回退栈//按返回键不直接跳到上一个Activity,回退栈getFragmentManager().beginTransaction().replace(R.ID.fl_container,bFragment).addToBackStack(null).commitAllowingStateLoss();Fragment和Activity通信
必须深刻理解的AndroID事件处理!常用两种方法:接口以及自定义类实现
基于监听的事件处理机制监听三要素** 当用户在应用界面上执行各种 *** 作时,应用程序需要为用户的动作提供响应,这种响应的过程就是事件处理!**
Event Source(事件源)
Event(事件)
Event Listener(事件监听器,与事件对应)
实现监听事件的方法 | EventActivity.java通过内部类实现
通过匿名内部类实现(eg:new clickLister)
通过事件源所在类实现
通过外部类实现 | 不常用 (eg:MyClickListener.java)
布局文件中的onClick属性(针对点击事件!)
给同一事件源添加多个同种类型事件监听器会怎样?Answer:系统会响应最后一个监听器,布局和其它都添加时,布局被认为是最新监听的,所以不会执行!
基于回调的事件处理机制 | EVENT.java | Widget/Mybutton.java回调机制与监听机制的区别回调机制的事件源和监听绑定在一起基于回调的事件传播先从控件本身回调,后向Activity回调!由内部向外部回调!
监听优先于回调!源码剖析,了解VIEw的事件分发
一个控件的触摸事件都是从dispatchtouchEvent往下分发的;入口方法!
dispatchtouchEvent -> setontouchListener->ontouchEvent;
onClick/onLongClick 来自ontouchEvent的处理;
Handler消息处理主要用途未来某时做某事
线程间通信
数据存储SharedPreferences 轻量级存储存储方法Xml文件,Key-Value形式
SharedPreferences | 读数据
SharedPreferences.Editor | 写数据
mEditor.apply();//提交数据,先修改内存值,后台存储 | 异步存储,优先考虑//mEditor.commit();//提交数据,同步存储文件目录/data/data/(非包名)/shared_prefsd
AndroID 存储概念内部存储外部存储公有目录真机要Root权限才能看到
获取数据:
Environment.getExternalStoragePublicDirectory(int type)私有目录file内部存储
fileOutputStream fileinputStreamfile外部存储权限利用Java的I/O流
23以上(6.0),动态申请权限
<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE"/>
//动态请求存储权限ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);<
插卡手机
<uses-permission androID:name="androID.permission.MOUNT_UNMOUNT_fileSYstemS"/>
模拟器上运行不了?但真机可运行!
广播以下教程在B站
动态和静态
有序和无序
LocalbroadcastManager{动态注册}补间动画和属性动画补间动画不一定要用广播实现,也可用OnActivityResult/StartActivityForResult实现!
属性动画 | ObjectAnimaActivity并未真正改变位置,视觉欺骗!
ValueAnimator
ObjectAnimator.offloat()
translationX translationY Alpha rotation rotationX…
附如何分析错误日志?Logcat
Error
按压水波纹效果button看视频!
bg_water
<ripple xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:color="#22000000"><item androID:drawable="@drawable/bg_btn2">item>ripple>bg_btn2
<shape xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:shape="rectangle"><solID androID:color="#ff9900" /><corners androID:radius="50dp"/>shape>最后
总结这个教程仅限入门教程,有许多高深的东西需要时间的积累才能掌握。同时技术在不断更新,我们只有保持一颗学习的态度才能持续走下去!
以上是内存溢出为你收集整理的Android粗浅系统学习(适合入门)全部内容,希望文章能够帮你解决Android粗浅系统学习(适合入门)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)