日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android鍵盤面板沖突布局閃動處理方案

之前有寫過一篇核心思想: Switching between the panel and the keyboard in Wechat

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為扎賚特等服務(wù)建站,扎賚特等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為扎賚特企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

這次主要是根據(jù)核心思想的實踐,實踐原理是通過CustomRootLayout布局變化,來獲知是否是鍵盤引起的真正的布局變化,進而處理到接下來PanelLayout的onMersure中。

  • 新算法不再動態(tài)修改View#LayoutParams,而是更加簡單明了的方式
  • ***代碼在原基礎(chǔ)上自動動態(tài)適配面板高度與鍵盤高度等高,很大程度上優(yōu)化了體驗。

我們可以看到微信中的 從鍵盤與微信的切換是無縫的,而且是無閃動的,這種基礎(chǔ)體驗是符合預(yù)期的。

但是實際中,簡單的 鍵盤與面板切換 是會有閃動,問題的。今天我們就實踐分析與解決這個問題。

最終效果對比:

I. 準(zhǔn)備

以下建立在Android:windowSoftInputMode帶有adjustResize的基礎(chǔ)上。

如圖,為了方便分析,我們分出3個View:

  • CustomRootView: 除去statusBar與ActionBar(ToolBar…balabala)
  • FootRootView: 整個底部(包括輸入框與底部面板在內(nèi)的整個View)
  • PanelView: 面板View

整個處理過程,其實需要分為兩塊處理:

從PanelView切換到Keybord

現(xiàn)象: 由于顯示Keybord時直接PanelView#setVisibility(View.GONE),導(dǎo)致會出現(xiàn)整個FooterRootView到底部然后又被鍵盤頂起。

符合預(yù)期的應(yīng)該: 直接被鍵盤頂起,不需要到底部再頂起。

從Keybord切換到PanelView

現(xiàn)象: 由于隱藏Keybord時,直接PanelView#setVisibility(View.VISIBLE),導(dǎo)致會出現(xiàn)整個FootRootView先被頂?shù)芥I盤上面,然后再隨著鍵盤的動畫,下到底部。

符合預(yù)期的應(yīng)該: 隨著鍵盤收下直接切換到底部,而配有被鍵盤頂起的閃動。

II. 處理

原理

在真正由Keybord導(dǎo)致布局真正將要變化的時候,才對PanelView做出適配。(注意,所有的判斷處理要在Super.onMeasure之前完成判斷)

方法:

通過CustomRootView高度的變化,來保證在Super.onMeasure之前獲得真正的由于鍵盤導(dǎo)致布局將要變化,然后告知PanelView,讓其在Super.onMeasure之前給到有效高度。

需要注意:

1) 在adjustResize模式下,鍵盤彈起會導(dǎo)致CustomRootView的高度變小,鍵盤收回會導(dǎo)致CustomRootView的高度變大,反之變小。因此可以通過這個機制獲知真正的PanelView將要變化的時機。

2) 由于到了onLayout,clipRect的大小已經(jīng)確定了,又要避免不多次調(diào)用onMeasure因此要在Super.onMeasure之前

3) 由于鍵盤收回的時候,會觸發(fā)多次measure,如果 不判斷真正的由于鍵盤收回導(dǎo)致布局將要變化,就直接給View#VISIBLE,依然會有閃動的情況。

4) 從Keybord切換到PanelView導(dǎo)致的布局沖突,只有在Keybord正在顯示的時候。

5) 從PanelView切換到Keybord導(dǎo)致的布局沖突,已經(jīng)在PanelView與CustomRootView中內(nèi)部處理。

III. GitHub:

JKeyboardPanelSwitch

? 2012 – 2016, Jacksgong(blog.dreamtobe.cn). Licensed under the Creative Commons Attribution-NonCommercial 3.0 license (This license lets others remix, tweak, and build upon a work non-commercially, and although their new works must also acknowledge the original author and be non-commercial, they don’t have to license their derivative works on the same terms). http://creativecommons.org/licenses/by-nc/3.0/ 


分享標(biāo)題:Android鍵盤面板沖突布局閃動處理方案
轉(zhuǎn)載注明:http://m.5511xx.com/article/dhdhedo.html