实习笔记-4

ImageView的参数

1
android:adjustViewBounds="true"

对应源码

1
2
3
4
5
6
7
@android.view.RemotableViewMethod
public void setAdjustViewBounds(boolean adjustViewBounds) {
mAdjustViewBounds = adjustViewBounds;
if (adjustViewBounds) {
setScaleType(ScaleType.FIT_CENTER);
}
}

应用场景

  • 当宽高有且仅有一个设置为wrapContent的时候是有用,指定一个宽or高,再根据drawable的比例确定另一个高/宽的值

协调者布局 CoordinateLayout

作用

协调子 View 之间交互的容器

使用例1

  • 点击FloatingActionBar弹出sneakbar,如果不适用CoordinateLayout,会导致弹出的SneakBar遮挡住FAB

layout_scrollFlags

  1. scroll|exitUntilCollapsed如果AppBarLayout的直接子控件设置该属性,该子控件可以滚动,向上滚动NestedScrollView出父布局(一般为CoordinatorLayout)时,会折叠到顶端,向下滚动时NestedScrollView必须滚动到最上面的时候才能拉出该布局
  2. scroll|enterAlways只要向下滚动该布局就会显示出来,只要向上滑动该布局就会向上收缩
  3. scroll|enterAlwaysCollapsed向下滚动NestedScrollView到最底端时该布局才会显示出来
    如果不设置改属性,则改布局不能滑动
  4. snap滑动时的弹性

CollapsingToolbarLayout

它的直接子布局可以使用的属性:app:layout_collapseMode(折叠模式)

  1. pin:在滑动过程中,此自布局会固定在它所在的位置不动,直到CollapsingToolbarLayout全部折叠或者全部展开
  2. parallax:视差效果,在折叠的时候会有个视差折叠的效果
  3. 不设置:跟随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
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
  • 接着,在AndroidManifest.xml文件下的application标签增加以下属性
1
android:networkSecurityConfig="@xml/network_security_config"

声明权限

1
2
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

注意标签是uses-permission,不是permission

作者

Meow Meow Liu

发布于

2022-03-22

更新于

2024-04-23

许可协议

评论