1.å¨CordinatorLayoutä¸ä½¿ç¨Webview
2.[Android]CoordinatorLayout 与 Behavior
3.NestedScrollView使ç¨åç解
å¨CordinatorLayoutä¸ä½¿ç¨Webview
为äºå®ç°webviewåä¸æ»å¨å¯ä»¥éètitleæ ï¼ç®åæç®ä¾¿çæ¹æ³å°±æ¯ä½¿ç¨CordinatorLayoutï¼è¦å¨CordinatorLayoutä¸ä½¿ç¨Webviewï¼å°±å¿ 须使Webviewå®ç°NestedScrollingChildæ¥å£æè å°WebViewåµå¥å¨å®ç°äºNestedScrollingChildæ¥å£çViewï¼ä¾å¦NestedScrollViewï¼RecylerViewï¼ä¸ãå è´´ä¸ä¸å¸å±æ件
æ¤æ¶webviewçé«åº¦ä¸ºå½å页é¢å ¨é¨å 容çé«åº¦ï¼ç±äºç¡¬ä»¶æ§è½éå¶ï¼å¾å±ç»å¶çé«åº¦ææ大å¼ï¼è¶ è¿æ大å¼ä¼é ææ æ³ç»å¶å¾å±å¼å¸¸ï¼åæ¶å¦æ没æcrashï¼ä¹ä¼å 为æ»å¨è¢«NestedScrollViewæ¦æªæ æ³å¤æå 容æ¯å¦æ»å°åºé¨å»å è½½æ´å¤ï¼å¦æå°è¯å¨é¡µé¢å è½½å®æåéæ°ç»å¶Webviewç大å°ä»¥é¿å ä¸è¿°å¼å¸¸ï¼åä¼å 为æ»å¨æä½è¢«NestedScrollViewæ¦æªèç½é¡µå 容æ æ³æ»å¨ï¼å æ¤ï¼Googleç»åºç建议æ¯ä¸è¦å°Webviewæ¾å¨NestedScrollViewä¸ã
åèï¼ /issues/
å¦æè¦å¨CordinatorLayoutä¸ä½¿ç¨Webviewï¼Googleæ¨èçæ¹æ³æ¯ä½¿ç¨NestedScrollæºå¶ï¼ä» Android 5.0 Lollipop å¼å§æä¾ä¸å¥ API æ¥æ¯æåµå ¥çæ»å¨ææãåæ ·å¨ææ°ç Support V4 å ä¸ä¹æä¾äºååçå ¼å®¹ãNestedScrollingæä¾äºä¸å¥ç¶ View åå View æ»å¨äº¤äºæºå¶ãè¦å®æè¿æ ·ç交äºï¼ç¶ View éè¦å®ç° NestedScrollingParent æ¥å£ï¼èå View éè¦å®ç° NestedScrollingChild æ¥å£ã
æ¥ä¸æ¥ç®åçä»ç»ä¸ä¸è¿ä¸¤ä¸ªç±»ï¼
ç±äºCordinatorLayoutæ¯æ¯æNestedScrollingParentçï¼æ以ä¸è¬æ åµä¸ç´æ¥ä½¿ç¨å°±å¯ä»¥äºï¼åªéè¦webviewæèªå®ä¹viewçä¸æ¯æNestedScrollingChildçview继æ¿NestedScrollingChild并å®ç°æ¥å£ä¸çæ¹æ³ï¼å¦ä»¥ä¸ç¤ºä¾:
å¨å¸å±æ件ä¸ï¼NestedWebViewç´æ¥ä½ä¸ºCordinatorlayoutçåæ§ä»¶å¹¶è®¾ç½®å±æ§app:layout_behavior="@string/appbar_scrolling_view_behavior"å°±å¯ä»¥æ¯ææ£å¸¸çåµå¥æ»å¨ã
å ¶å®NestedScrollingææ ¸å¿çå 容就æ¯å¯¹æ»å¨äºä»¶éæ°åé æ ¹æ®æ»å¨ä½ç½®å°å¨ä½ååå°å¯¹åºçæ§ä»¶å¹¶ç±å¯¹åºæ§ä»¶æ¶è´¹ä»¥è¾¾å°åµå¥æ»å¨çè¿å¸¦ææã
åèï¼
1. /reference/android/support/v4/view/NestedScrollingParent.html
2. /takahirom/webview-in-coordinatorlayout/tree/master/app/src/main/java/com/github/takahirom/webview_in_coodinator_layout
[Android]CoordinatorLayout 与 Behavior
CoordinatorLayout是套源一种增强版的FrameLayout,主要应用于构建具有交互效果的套源布局。它的套源使用场景通常包括与AppBarLayout、CollapsingToolbarLayout和Toolbar的套源结合,为应用增添更多的套源动态与交互性。布局结构的套源源支付5.2源码示意图如下所示,显示了这些组件之间的套源关系。
在CoordinatorLayout中,套源几个常用的套源属性和布局元素被提及,如app:layout_behavior、套源app:layout_anchor、套源app:layout_anchorGravity等。套源app:layout_behavior用于指定子视图的套源返利分红 返利 源码行为,而app:layout_anchor和app:layout_anchorGravity则用于指定锚点和布局重心。套源
AppBarLayout通常作为CoordinatorLayout的套源直接子类使用,其子视图通过设置自身的scrollFlags来实现期望的滑动行为。如果将AppBarLayout放置在普通的ViewGroup中而非CoordinatorLayout中,其功能将不会生效。
CollapsingToolbarLayout是诱导充值直播源码一个实现了折叠功能的视图,用于包裹Toolbar,并作为AppBarLayout的子视图使用。它提供了折叠模式、内容遮罩等功能,为应用提供更具吸引力的界面体验。
Behavior是微信息发布源码用于协调CoordinatorLayout内子视图交互的关键概念。如果要对CoordinatorLayout内部的滑动视图进行特定交互操作,需要设置Behavior。默认情况下,CoordinatorLayout内部的滑动视图已提供了相应的Behavior,如设置为app:layout_behavior="@string/appbar_scrolling_view_behavior"。
Behavior的精品源码分享社区方法分为几类:布局相关、事件处理、滑动事件、以及依赖于特定View的方法。了解这些方法在自定义Behavior时至关重要。
CoordinatorLayout与Behavior的关系在源码层面体现为,CoordinatorLayout在处理测量、布局、触摸事件时会调用Behavior的相关方法。这使得Behavior能够影响子视图的行为,实现更复杂且定制化的交互效果。
CoordinatorLayout实现了NestedScrollingParent2接口,支持嵌套滑动。在处理嵌套滑动时,CoordinatorLayout会将滑动事件分发至相应的Behavior方法,如onStartNestedScroll、onInterceptTouchEvent等,从而实现层次化的滑动处理。
在处理AppBarLayout的滑动时,可以自定义AppBarStateChangeListener来监听其状态变化,例如展开、折叠和闲置状态,并相应地调整布局。
值得注意的是,正确使用CoordinatorLayout与Behavior需要深入理解其工作原理和方法,以充分利用它们提供的功能和特性,从而实现更丰富、更流畅的用户界面和交互体验。
NestedScrollView使ç¨åç解
NestedScrollView å³ æ¯æåµå¥æ»å¨ç ScrollView ãå æ¤ï¼æ们å¯ä»¥ç®åçæ NestedScrollView ç±»æ¯ä¸º ScrollView ï¼å ¶ä½ç¨å°±æ¯ä½ä¸ºæ§ä»¶ç¶å¸å±ï¼ä»èå ·å¤ï¼åµå¥ï¼æ»å¨åè½ã
NestedScrollView ä¸ ScrollView çåºå«å°±å¨äº NestedScrollView æ¯æ åµå¥æ»å¨ ï¼æ 论æ¯ä½ä¸ºç¶æ§ä»¶è¿æ¯åæ§ä»¶ï¼åµå¥æ»å¨é½æ¯æï¼ä¸é»è®¤å¼å¯ã
å æ¤ï¼å¨ä¸äºéè¦æ¯æåµå¥æ»å¨çæ æ¯ä¸ï¼æ¯å¦ä¸ä¸ª ScrollView å é¨å 裹ä¸ä¸ª RecyclerView ï¼é£ä¹å°±ä¼äº§çæ»å¨å²çªï¼è¿ä¸ªé®é¢å°±éè¦ä½ èªå·±å»è§£å³ãèå¦æä½¿ç¨ NestedScrollView å 裹 RecyclerView ï¼åµå¥æ»å¨å¤©ç¶æ¯æï¼ä½ æ éåä»ä¹å°±å¯ä»¥å®ç°åé¢æ³è¦å®ç°çåè½äºã
举个ä¾åï¼
æ们é常为 RecyclerView å¢å ä¸ä¸ª Header å Footer çæ¹æ³æ¯éè¿å®ä¹ä¸åç viewTypeæ¥åºåçï¼èå¦æä½¿ç¨ NestedScrollView ï¼æ们å®å ¨å¯ä»¥æ RecyclerView å½æä¸ä¸ªåç¬çæ§ä»¶ï¼ç¶åå¨å ¶ä¸é¢å¢å ä¸ä¸ªæ§ä»¶ä½ä¸º Headerï¼å¨å ¶ä¸é¢å¢å ä¸ä¸ªæ§ä»¶ä½ä¸º Footerã
å ·ä½å¸å±å¦ä¸æ示ï¼
注ï¼NestedScrollView ä¸ ScrollView ä¸æ ·ï¼å é¨åªè½å®¹çº³ä¸ä¸ªåæ§ä»¶ã
ææå¦ä¸æ示ï¼
psï¼è½ç¶ NestedScrollView å åµ RecyclerView åå ¶ä»æ§ä»¶å¯ä»¥å®ç° Header å Footerï¼ä½è¿æ¯ä¸æ¨èä¸é¢è¿ç§åæ³ï¼å»ºè®®è¿æ¯ç´æ¥ä½¿ç¨ RecyclerView èªå·±æ·»å Header å Footerï¼ï¼å 为è½ç¶ NestedScrollView æ¯æåµå¥æ»å¨ï¼ä½æ¯å¨å®é åºç¨ä¸ï¼åµå¥æ»å¨å¯è½ä¼å¸¦æ¥å ¶ä»çä¸äºå¥å¥æªæªçå¯ä½ç¨ï¼Google ä¹æ¨èæ们è½ä¸ä½¿ç¨åµå¥æ»å¨å°±å°½éä¸è¦ä½¿ç¨ã
å¦ææ³ç¥é NestedScrollView åµå¥å ¶ä»æ§ä»¶å¯è½å¸¦æ¥çé®é¢ï¼å¯ä»¥æ¥çï¼ NestedScrollViewãRecycleViewãViewPager çå¸å±æ¹é¢ç常è§é®é¢æ±æ»ï¼å解å³
æ们ç¥éï¼Android çäºä»¶ååæºå¶ä¸ï¼åªè¦æä¸ä¸ªæ§ä»¶æ¶è´¹äºäºä»¶ï¼å ¶ä»æ§ä»¶å°±æ²¡åæ³åæ¥æ¶å°è¿ä¸ªäºä»¶äºãå æ¤ï¼å½æåµå¥æ»å¨åºæ¯æ¶ï¼æ们é½éè¦èªå·±æå¨è§£å³äºä»¶å²çªãèå¨ Android 5.0 Lollipop ä¹åï¼Google å®æ¹éè¿ åµå¥æ»å¨æºå¶è§£å³äºä¼ ç» Android äºä»¶ååæ æ³å ±äº«äºä»¶è¿ä¸ªé®é¢ã
åµå¥æ»å¨æºå¶çåºæ¬åçå¯ä»¥è®¤ä¸ºæ¯äºä»¶å ±äº«ï¼å³å½åæ§ä»¶æ¥æ¶å°æ»å¨äºä»¶ï¼åå¤è¦æ»å¨æ¶ï¼ä¼å éç¥ç¶æ§ä»¶( startNestedScroll ï¼ï¼ç¶åå¨æ»å¨ä¹åï¼ä¼å 询é®ç¶æ§ä»¶æ¯å¦è¦æ»å¨ï¼ dispatchNestedPreScroll )ï¼å¦æç¶æ§ä»¶ååºè¯¥äºä»¶è¿è¡äºæ»å¨ï¼é£ä¹å°±ä¼éç¥åæ§ä»¶å®å ·ä½æ¶èäºå¤å°æ»å¨è·ç¦»ï¼ç¶å交ç±åæ§ä»¶å¤çå©ä½çæ»å¨è·ç¦»ï¼æååæ§ä»¶æ»å¨ç»æåï¼å¦ææ»å¨è·ç¦»è¿æå©ä½ï¼å°±ä¼åé®ä¸ä¸ç¶æ§ä»¶æ¯å¦éè¦å¨ç»§ç»æ»å¨å©ä¸çè·ç¦»ï¼ dispatchNestedScroll )...
ä¸é¢å ¶å®å°±æ¯ åµå¥æ»å¨æºå¶çå·¥ä½åçï¼é£ä¹å¦ææ³è®©æ们èªå®ä¹ç View æè ViewGroup å®ç°åµå¥æ»å¨åè½ï¼åºè¯¥ææ ·åå¢ï¼
å ¶å®ï¼å¨ Android 5.0 ä¹åï¼ç³»ç»èªå¸¦ç View å ViewGroup é½å¢å äº åµå¥æ»å¨æºå¶ç¸å ³çæ¹æ³äºï¼ä½æ¯é»è®¤ä¸ä¼è¢«è°ç¨ï¼å æ¤é»è®¤ä¸å ·å¤åµå¥æ»å¨åè½ï¼ï¼æ以å¦æå¨ Android 5.0 åä¹åçå¹³å°ä¸ï¼èªå®ä¹ View åªè¦è¦åç¸åºç åµå¥æ»å¨æºå¶ç¸å ³æ¹æ³å³å¯ï¼ä½æ¯ä¸ºäºæä¾ä½çæ¬å ¼å®¹æ§ï¼Google å®æ¹è¿æä¾äºä¸¤ä¸ªæ¥å£ï¼åå«ä½ä¸º åµå¥æ»å¨æºå¶ç¶æ§ä»¶æ¥å£ååæ§ä»¶æ¥å£ï¼
åé¢æä»¬è¯´è¿ NestedScrollView æ 论æ¯ä½ä¸ºç¶æ§ä»¶è¿æ¯åæ§ä»¶é½æ¯æåµå¥æ»å¨ï¼å°±æ¯å 为å®åæ¶å®ç°äº NestedScrollingParent å NestedScrollingChild ãææ¡£å¦ä¸æ示ï¼
æ¥ç详ç»åæï¼/p/fabca