实习笔记-4
ImageView的参数
1 | android:adjustViewBounds="true" |
对应源码
1 | .view.RemotableViewMethod |
应用场景
- 当宽高有且仅有一个设置为wrapContent的时候是有用,指定一个宽or高,再根据drawable的比例确定另一个高/宽的值
协调者布局 CoordinateLayout
作用
协调子 View 之间交互的容器
使用例1
- 点击FloatingActionBar弹出sneakbar,如果不适用CoordinateLayout,会导致弹出的SneakBar遮挡住FAB
layout_scrollFlags
scroll|exitUntilCollapsed
如果AppBarLayout的直接子控件设置该属性,该子控件可以滚动,向上滚动NestedScrollView出父布局(一般为CoordinatorLayout)时,会折叠到顶端,向下滚动时NestedScrollView必须滚动到最上面的时候才能拉出该布局scroll|enterAlways
只要向下滚动该布局就会显示出来,只要向上滑动该布局就会向上收缩scroll|enterAlwaysCollapsed
向下滚动NestedScrollView到最底端时该布局才会显示出来
如果不设置改属性,则改布局不能滑动snap
滑动时的弹性
CollapsingToolbarLayout
它的直接子布局可以使用的属性:app:layout_collapseMode(折叠模式)
- pin:在滑动过程中,此自布局会固定在它所在的位置不动,直到CollapsingToolbarLayout全部折叠或者全部展开
- parallax:视差效果,在折叠的时候会有个视差折叠的效果
- 不设置:跟随NestedScrollView的滑动一起滑动,NestedScrollView滑动多少距离他就会跟着走多少距离
自定义Behavior
通常自定义Behavior分为两种情况:
- 某个View依赖另一个View,监听其位置、尺寸等状态的变化。
- 某个View监听CoordinatorLayout内实现了NestedScrollingChild接口的子View的滑动状态变化(也是一种依赖关系)。
只有CoordinatorLayout的直接子布局才能响应
效果示例

可override的几个函数
- onInterceptTouchEvent():是否拦截触摸事件
- onTouchEvent():处理触摸事件
- layoutDependsOn():确定使用Behavior的View要依赖的View的类型
- onDependentViewChanged():当被依赖的View状态改变时回调
- onDependentViewRemoved():当被依赖的View移除时回调
- onMeasureChild():测量使用Behavior的View尺寸
- onLayoutChild():确定使用Behavior的View位置
- onStartNestedScroll():嵌套滑动开始(ACTION_DOWN),确定Behavior是否要监听此次事件
- onStopNestedScroll():嵌套滑动结束(ACTION_UP或ACTION_CANCEL)
- onNestedScroll():嵌套滑动进行中,要监听的子 View的滑动事件已经被消费
- onNestedPreScroll():嵌套滑动进行中,要监听的子 View将要滑动,滑动事件即将被消费(但最终被谁消费,可以通过代码控制)
- onNestedFling():要监听的子 View在快速滑动中
- onNestedPreFling():要监听的子View即将快速滑动
(参考)[https://www.jianshu.com/p/b987fad8fcb4]
NestedScrollView
- NestedScrollView 与 ScrollView 一样,内部只能容纳一个子控件。当存在多个组件(产生滑动冲突时),解决冲突的办法:
1 | android:nestedScrollingEnabled="false" |
RecyclerView 实现瀑布流效果
- 1)通过LinearLayoutManager:我们可以实现横向、纵向的列表效果
- 2)通过GridLayoutManager:我们可以实现像GridView一样的网格布局
- 3)通过StaggeredGridLayoutManager:我们可以实现瀑布流的效果
网络请求踩坑
明码传输
D/OkHttp: <-- HTTP FAILED: java.net.UnknownServiceException: CLEARTEXT communication to japi.juhe.cn not permitted by network security policy
为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输。
- 在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
1 |
|
- 接着,在AndroidManifest.xml文件下的application标签增加以下属性
1 | android:networkSecurityConfig="@xml/network_security_config" |
声明权限
1 | <uses-permission android:name="android.permission.INTERNET" /> |
注意标签是uses-permission
,不是permission