Android 解決鍵盤遮擋輸入框

本文目錄 點擊直達

  • Android 解決鍵盤遮擋輸入框
    • 代碼實現
    • 使用
      • 注意
  • 最后我還有一句話要說
      • 梧桐葉上三更雨,葉葉聲聲是別離。

Android 解決鍵盤遮擋輸入框

在安卓中通常可以通過添加android:windowSoftInputMode="adjustResize|stateHidden"的方式來讓鍵盤頂起布局,但是如果對狀態欄進行過著色隱藏等操作時,這個配置將不會生效,此時輸入框輸入時鍵盤仍然不會將布局抬起

經過一番搜索和驗證,可以使用AndroidBug5497Workaround來解決問題,但是現今此方案已無法完美適配底部導航欄的情況,所以我基于之前的方案進行了優化

代碼實現

將AdjustResizeHelper.kt類Copy進你的項目,需要注意的是這是kotlin語法

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.graphics.Rect
import android.os.Build
import android.view.View
import android.view.WindowInsetsobject AdjustResizeHelper {fun supportAdjustResize(activity: Activity) {val decorView = activity.window.decorViewvar usableHeightPrevious = 0if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {decorView.setOnApplyWindowInsetsListener { v, insets ->val usableHeightNow = computeUsableHeight(decorView)if (usableHeightPrevious == usableHeightNow) {return@setOnApplyWindowInsetsListener insets}usableHeightPrevious = usableHeightNowval imeInsets = insets.getInsets(WindowInsets.Type.ime())val navigationBars = insets.getInsets(WindowInsets.Type.navigationBars())val keyboardHeight = imeInsets.bottom - navigationBars.bottomif (keyboardHeight > 0) {decorView.setPadding(0, 0, 0, keyboardHeight)} else {decorView.setPadding(0, 0, 0, 0)}v.onApplyWindowInsets(insets)}} else {decorView.viewTreeObserver.addOnGlobalLayoutListener {val usableHeightNow = computeUsableHeight(decorView)if (usableHeightPrevious == usableHeightNow) {return@addOnGlobalLayoutListener}usableHeightPrevious = usableHeightNowval rect = Rect()decorView.getWindowVisibleDisplayFrame(rect)val screenHeight = decorView.heightval heightDifference = screenHeight - rect.bottom - getNavigationBarHeight(activity)if (heightDifference > 100) { // 軟鍵盤彈出decorView.setPadding(0, 0, 0, heightDifference)} else { // 軟鍵盤隱藏decorView.setPadding(0, 0, 0, 0)}}}}@SuppressLint("InternalInsetResource")fun getNavigationBarHeight(context: Context): Int {val resources = context.resourcesval resourceId = resources.getIdentifier("navigation_bar_height","dimen","android")return if (resourceId > 0) {resources.getDimensionPixelSize(resourceId)} else 0}private fun computeUsableHeight(view: View): Int {val r = Rect()view.getWindowVisibleDisplayFrame(r)return (r.bottom - r.top)}
}

使用

使用起來很簡單,先在Activity的配置中添加android:windowSoftInputMode="adjustResize|stateHidden",然后如下圖在Activity的onCreate回調中添加此功能即可
在這里插入圖片描述

注意

因為使用通話的雙通道麥克風實現了降噪,所以使用時可能聲音較小,如果沒有聲音,請將聲音調到最大,然后湊近麥克風吼兩句"感謝博主,我會一鍵三連的"

最后我還有一句話要說

梧桐葉上三更雨,葉葉聲聲是別離。

周紫芝《鷓鴣天·一點殘紅欲盡時》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91077.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

熱門JavaScript庫“is“等軟件包遭npm供應鏈攻擊植入后門

輕量級 JavaScript 實用工具庫 "is" 是 NPM 平臺上的熱門項目,每周下載量超過 220 萬次。然而在 2025 年 7 月 19 日,該庫開發者遭遇釣魚攻擊導致賬戶憑證泄露,攻擊者借此發布了包含遠程代碼執行后門的惡意版本。釣魚攻擊入侵開發者…

如何實現緩存音頻功能(App端詳解)

本方案提供了符合平臺規范的音頻緩存實現,通過分層設計確保功能可靠性,同時預留擴展點支持未來優化需求。📦 音頻緩存與播放流程說明 項目目標 實現App端音頻資源的自動緩存與播放: 獲取遠程音頻URL下載文件至本地_downloads/目錄…

從零到一:Django圖書管理系統完整開發實戰指南

作者:笙囧同學 身份:中科院計算機大模型方向碩士 | 全棧開發愛好者 座右銘:偷懶是人生進步的階梯 聯系方式:3251736703qq.com 可接課設,論文,專利輔導 全平臺賬號:笙囧同學 📖 前言 …

硬件電路設計(基本元器件)

一、電阻 1.電阻的基本概念 電阻是導體對電流阻礙作用的物理量,符號為R,單位為歐姆(Ω)。電阻的大小由導體的材料、長度、橫截面積和溫度共同決定。 電阻公式 導體的電阻R可通過以下公式計算: ρ:電阻率&…

R語言常用擴展包

R語言的強大之處很大程度上源于其豐富的擴展包(Packages)生態系統,目前CRAN( Comprehensive R Archive Network)上托管的擴展包已超過20,000個。以下是不同領域最常用的核心擴展包分類介紹: 一、數據處理與…

文件相關問題(AI回答)

一個進程打開一個文件,另一個進程能刪除這個文件嗎DeepSeek-R1 回答完成深度思考完成 用時10秒是的,?另一個進程可以刪除一個已被打開的文件?,但具體行為取決于操作系統和文件系統。以下是關鍵細節:1. ?Linux/Unix 的行為??刪…

三相四橋臂SVPWM控制及電機模型

三相四橋臂SVPWM控制策略及其在電機驅動中應用 一、三相四橋臂逆變器拓撲特性 1. 結構優勢 中性點控制:第四橋臂獨立調節中性點電壓,支持不平衡負載電壓利用率:相比傳統三橋臂提升15.47%,最大線電壓達U_{dc}硬件簡化:無…

deepseek+飛書多維表格 打造小紅書矩陣

通過AI技術平臺DeepSeek的數據分析與內容生成能力,結合飛書多維表格的智能化協作管理,實現小紅書矩陣賬號的高效運營。DeepSeek精準抓取熱點趨勢并生成爆款文案,飛書多維表格則提供可視化內容排期、多賬號數據看板及團隊任務分配功能&#xf…

4、如何生成分布式ID?

目錄 1、分布式ID介紹 什么是 ID? 什么是分布式 ID? 分布式 ID 需要滿足哪些要求? 2、分布式 ID 常見解決方案 1、數據庫 示例使用2: 2、數據庫號段模式 使用示例2: 一、核心設計思路 二、實現代碼 1. 數據庫表設計&…

Rust 實戰三 | HTTP 服務開發及 Web 框架推薦

往期回顧 Rust 實戰二 | 開發簡易版命令行工具 grepRust 實戰一 | 用 RustRover 開發猜數字游戲Rust 安裝與版本更新 代碼開源地址:https://github.com/0604hx/rust-journey 🚀 Web 框架 名稱性能(QPS)WebSocket / SSEGitHub ?…

墨者:SQL過濾字符后手工注入漏洞測試(第1題)

1. 墨者學院:SQL過濾字符后手工注入漏洞測試(第1題)🚀 2. 漏洞背景與測試思路🔍 在Web安全測試中,當遇到對輸入字符有過濾的SQL注入漏洞時,我們需要使用特殊技巧繞過過濾機制。本次測試的目標URL存在字符過濾&#xff…

深入解析 Vue 3 中 v-model 與表單元素的綁定機制

v-model 是 Vue 中最強大的指令之一,它簡化了表單數據雙向綁定的實現。本文將系統梳理各種 HTML 表單元素與 v-model 的綁定關系,特別是那些容易引起困惑的類型。一、v-model 的本質v-model 是一個語法糖,它實際上是 :value 和 input 的組合&…

【趙渝強老師】MySQL中的數據庫對象

MySQL數據庫中包含各自數據庫對象,常見的數據庫對象有:表、索引、視圖、事件、存儲過程和存儲函數等等。 視頻講解如下 【趙渝強老師】MySQL中的數據庫對象一、 創建與管理表 表是一種非常重要的數據庫對象,MySQL數據庫的數據都是存儲在表中…

Angular面試題目和答案大全

基礎概念篇1. 什么是Angular?它與AngularJS有什么區別?答案: Angular是由Google開發的基于TypeScript的開源Web應用框架,用于構建單頁應用程序(SPA)。Angular vs AngularJS對比:特性AngularJSAn…

CSS 語音參考

CSS 語音參考 概述 CSS(層疊樣式表)是用于描述HTML或XML文檔樣式的樣式表語言。它為網頁元素提供了一種統一的方式來定義字體、顏色、布局和其他視覺屬性。CSS語音參考旨在為開發者提供一個詳盡的指南,以便他們能夠更有效地使用CSS來增強網頁…

C# WPF 實現讀取文件夾中的PDF并顯示其頁數

文章目錄技術選型第一步:創建項目并安裝依賴庫第二步:定義數據模型 (Model)第三步:創建視圖模型 (ViewModel)第四步:設計用戶界面 (View)總結與解釋后記關于轉換器的錯誤工作中需要整理一些PDF格式文件,程序員的存在就…

設計模式(五)創建型:原型模式詳解

設計模式(五)創建型:原型模式詳解原型模式(Prototype Pattern)是 GoF 23 種設計模式中的創建型模式之一,其核心價值在于通過復制現有對象來創建新對象,而不是通過 new 關鍵字調用構造函數。它特…

K8S 八 數據存儲-高級存儲PV PVC 生命周期;配置存儲ConfigMap Secret

目錄數據存儲 Volume8.1 基本存儲8.1.1 EmptyDir8.1.2 HostPath 掛載目錄8.1.3 NFSnfs的服務8.2 高級存儲8.2.1 PV和PVC8.2.2 PV 持久化卷申請8.2.3 PVC 資源申請PVC的配置參數8.2.4 生命周期配置存儲8.3.1 ConfigMap8.3.2 Secret數據存儲 Volume Kubernetes的Volume支持多種類…

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現輪船檢測識別(C#代碼UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8深度學習模型實現輪船檢測識別(C#代碼UI界面版)工業相機使用YoloV8模型實現輪船檢測識別工業相機通過YoloV8模型實現輪船檢測識別的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖像轉換Bitmap圖像格…

自習室預約小程序的設計與實現

自習室預約小程序的設計與實現現代學習環境對高效、便捷的預約系統需求日益增長。自習室預約小程序結合前沿技術棧,提供流暢的用戶體驗和強大的后臺管理功能,滿足學生、職場人士等群體的自習需求。技術架構與核心功能Vue.js 構建動態前端界面 采用 Vue.j…