怎么在Android應用中實現一個背景可滑動的登錄界面效果-創(chuàng)新互聯

怎么在Android應用中實現一個背景可滑動的登錄界面效果?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

十年的元江縣網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整元江縣建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯從事“元江縣網站設計”,“元江縣網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

實現思路

主要列舉一下實現過程過程中遇到的難點。

如何使鍵盤彈出時候不遮擋底部登錄布局;

當鍵盤彈出的時候如何不壓縮背景圖片或者背景延伸至「屏幕以外」;

從 「 windowSoftInputMode 」 說起

相信大家都清楚,Google 官方提供給開發(fā)者控制軟鍵盤顯示隱藏的方法不多,「windowSoftInputMode」算是我們可控制的軟鍵盤彈出模式的方法之一。關于其屬性的說明Google 官方和網上的教程說了很多,他的屬性值由兩部分組成,形如「 stateHidden|adjustResize 」的格式,其前半部分(事實上也可寫在后邊)表示所設置的 Activity 進入時軟鍵盤的狀態(tài),后半部分表示軟鍵盤彈出的時候頁面是如何調整的。

下邊分別列出幾個可選屬性及其含義:

通過上述列表我們可以了解到 windowSoftInputMode 的幾個屬性值的含義。我們可以根據具體的需求來選擇合適屬性。However ! 產品需求永遠比屬性來的奇葩。比如說我們想要實現的的這個效果:

軟鍵盤彈出不遮擋全部的輸入布局,并不是單純的留出一個輸入框控件

軟鍵盤被彈起的時候背景不能被壓縮,或者向上滑動

首先看第一個需求:我們可以使用 adjustResize 屬性來達到效果,可以看到這樣圖片已經被自動向上移動了,ok,如果效果您還算滿意,那我就沒什么好說的了,但是我們老板和產品以及 UI 說這樣不好,背景不能壓縮也就是我們說的第二個需求。當時我心中就有一種 mmp 想對他們說。但是呢作為一個敢于挑戰(zhàn)的 Android 程序員來說這個小小的需求并不算什么。

怎么在Android應用中實現一個背景可滑動的登錄界面效果

對于第二個需求,首先我們要了解為什么圖片會被上滑,是因為我們配置了 adjustResize 屬性,系統(tǒng)自動根據鍵盤所需要的空間向上移動整個頁面的布局,并調整頁面布局的大小以滿足不被軟鍵盤隱藏的效果。舉個栗子:

手機屏幕的高為1920px,那么整個Activity的布局高度也為1920px。當設置該屬性后點擊界面中的EditText,此時彈出軟鍵盤其高度為800px。為了完整地顯示此軟鍵盤,系統(tǒng)會調整Activity布局的高度為1920px-800px=1120px。
注意這里說了會調整布局的大小,根據以往的經驗,系統(tǒng)自動調節(jié)的布局都不是我們想要的結果,比如各種可滑動 View 嵌套的問題。那么這個需求能否依據這個思路來結局呢?

當 windowSoftInputMode 被設置為 adjustResize 時候,當布局調整的時候被調整的布局均會重繪制,并走了onMeasure,onSizeChanged,onLayout 。

當 windowSoftInputMode 被設置為 adjustPan 時候,當布局調整的時候被調整的布局均會重繪制,并走了onMeasure, onLayout 。

這里只需要注意 兩者都走了 onMeasure 方法,至于 adjustPan 沒走 onSizeChanged ,我們會在之后關于軟鍵盤彈出的監(jiān)控的文章中詳細說明。
那么我們就利用其走了 onMeasure 方法,來「阻止」系統(tǒng)自動調整的布局大小。由于我們背景用了 ViewPager,所以我們需要重寫 ViewPager 的 OnMeasure 方法。

public class AutoViewPager extends ViewPager {
 private int mScreenHeight;
 public AutoViewPager(Context context) {
  this(context,null);
 }
 public AutoViewPager(Context context, AttributeSet attrs) {
  super(context, attrs);
  mScreenHeight = DensityUtil.getHeight(getContext());
 }
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  heightMeasureSpec = MeasureSpec.makeMeasureSpec(mScreenHeight, MeasureSpec.EXACTLY);
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 }
}

網頁名稱:怎么在Android應用中實現一個背景可滑動的登錄界面效果-創(chuàng)新互聯
轉載來于:http://muchs.cn/article30/dsgdpo.html

成都網站建設公司_創(chuàng)新互聯,為您提供ChatGPT、商城網站虛擬主機、全網營銷推廣網站內鏈、面包屑導航

廣告

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

小程序開發(fā)