Android鍵盤面板沖突及布局閃動(dòng)的處理方法

Android鍵盤面板沖突及布局閃動(dòng)的處理方法,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、屏山ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的屏山網(wǎng)站制作公司

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

  • 新算法不再動(dòng)態(tài)修改View#LayoutParams,而是更加簡(jiǎn)單明了的方式

  • ***代碼在原基礎(chǔ)上自動(dòng)動(dòng)態(tài)適配面板高度與鍵盤高度等高,很大程度上優(yōu)化了體驗(yàn)。

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

但是實(shí)際中,簡(jiǎn)單的 鍵盤與面板切換 是會(huì)有閃動(dòng),問題的。今天我們就實(shí)踐分析與解決這個(gè)問題。

最終效果對(duì)比:

Android鍵盤面板沖突及布局閃動(dòng)的處理方法

Android鍵盤面板沖突及布局閃動(dòng)的處理方法

I. 準(zhǔn)備

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

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

Android鍵盤面板沖突及布局閃動(dòng)的處理方法

  • CustomRootView: 除去statusBar與ActionBar(ToolBar…balabala)

  • FootRootView: 整個(gè)底部(包括輸入框與底部面板在內(nèi)的整個(gè)View)

  • PanelView: 面板View

整個(gè)處理過程,其實(shí)需要分為兩塊處理:

從PanelView切換到Keybord

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

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

從Keybord切換到PanelView

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

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

II. 處理

原理

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

方法:

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

需要注意:

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

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

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

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

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

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

分享題目:Android鍵盤面板沖突及布局閃動(dòng)的處理方法
文章出自:http://muchs.cn/article40/ghooho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、響應(yīng)式網(wǎng)站、Google、建站公司、網(wǎng)頁設(shè)計(jì)公司、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司