偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Android鍵盤(pán)面板沖突 布局閃動(dòng)處理方案

移動(dòng)開(kāi)發(fā) Android
這次主要是根據(jù)核心思想的實(shí)踐,實(shí)踐原理是通過(guò)CustomRootLayout布局變化,來(lái)獲知是否是鍵盤(pán)引起的真正的布局變化,進(jìn)而處理到接下來(lái)PanelLayout的onMersure中。

之前有寫(xiě)過(guò)一篇核心思想: Switching between the panel and the keyboard in Wechat

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

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

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

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

最終效果對(duì)比:

 

 

 

 

I. 準(zhǔn)備

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

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

 

 

 

 

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

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

從PanelView切換到Keybord

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

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

從Keybord切換到PanelView

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

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

II. 處理

原理

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

方法:

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

需要注意:

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

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

3) 由于鍵盤(pán)收回的時(shí)候,會(huì)觸發(fā)多次measure,如果 不判斷真正的由于鍵盤(pán)收回導(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)部處理。

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/ 

責(zé)任編輯:龐桂玉 來(lái)源: 安卓開(kāi)發(fā)精選
相關(guān)推薦

2013-09-17 10:17:39

Android布局

2024-09-12 15:43:46

C#代碼后端

2023-12-05 18:09:04

2010-09-26 13:30:08

DHCP協(xié)議故障處理

2010-07-29 15:56:04

FlexSocket

2012-03-29 09:57:06

jQuery

2022-08-15 07:24:41

WindowsDLL鍵盤(pán)

2014-07-29 15:23:06

Android

2020-01-08 10:15:48

Windows 10鍵盤(pán)布局Windows

2010-08-05 13:20:41

Flex最優(yōu)布局

2009-04-29 15:13:43

微軟同步框架MSF

2021-01-21 05:50:28

MVVM模式Wpf

2013-04-25 14:26:54

GridView

2025-04-08 05:55:00

CSS布局Grid

2010-09-08 15:49:21

SmartyCSS

2020-06-11 16:35:59

Android 11安卓更新

2011-05-31 09:36:46

Android 布局屬性

2012-05-08 16:37:23

android

2017-05-11 15:01:43

Androidweb布局

2010-01-25 18:33:35

Android鍵盤(pán)操作
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)