成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android鍵盤面板沖突 布局閃動處理方案

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

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

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

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

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

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

最終效果對比:

 

 

 

 

I. 準備

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

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

 

 

 

 

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

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

從PanelView切換到Keybord

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

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

從Keybord切換到PanelView

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

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

II. 處理

原理

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

方法:

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

需要注意:

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

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

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

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

5) 從PanelView切換到Keybord導致的布局沖突,已經在PanelView與CustomRootView中內部處理。

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/ 

責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2013-09-17 10:17:39

Android布局

2024-09-12 15:43:46

C#代碼后端

2023-12-05 18:09:04

2022-08-15 07:24:41

WindowsDLL鍵盤

2010-09-26 13:30:08

DHCP協議故障處理

2010-07-29 15:56:04

FlexSocket

2012-03-29 09:57:06

jQuery

2014-07-29 15:23:06

Android

2010-08-05 13:20:41

Flex最優布局

2020-01-08 10:15:48

Windows 10鍵盤布局Windows

2025-04-08 05:55:00

CSS布局Grid

2021-01-21 05:50:28

MVVM模式Wpf

2009-04-29 15:13:43

微軟同步框架MSF

2013-04-25 14:26:54

GridView

2010-09-08 15:49:21

SmartyCSS

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鍵盤操作

2011-09-16 16:13:25

Android虛擬鍵盤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜国产在线 | 久久国色| 国产精品一卡 | 91在线一区| 亚洲综合天堂 | 日本一区二区视频 | 亚洲精品二区 | 久久国产精彩视频 | 久久精品亚洲成在人线av网址 | 国产一区二区在线免费观看 | 一区二区三区视频在线观看 | 色资源站 | 免费久久精品视频 | 一区二区三区四区不卡视频 | 7777精品伊人久久精品影视 | 一区二区在线不卡 | h视频免费在线观看 | 福利久久 | 中文字幕精品一区 | 精彩视频一区二区三区 | 国产精品毛片无码 | 蜜桃精品噜噜噜成人av | 国产专区在线 | 国产精品视频www | 国产一区二区在线视频 | 一区二区三区免费网站 | 日日碰碰 | 一区二区三区精品视频 | 亚洲色图综合 | 国产一级电影在线 | 在线观看三级av | 亚洲一区二区电影在线观看 | 国产精品成人一区二区 | 精品一二三区 | 伊人免费在线观看 | 羞羞视频在线免费 | 亚洲综合区 | 日日天天| 色在线免费视频 | 久久鲁视频 | 精品国产一区二区三区成人影院 |