關於Android彈出軟鍵盤「頂起」View的問題

2021-09-24 21:16:43 字數 3311 閱讀 4175

問題簡單一帶而過,後面直接說解決思路,android系統已經給我們提供了防止鍵盤遮擋輸入內容的解決方案,比如在清單檔案對應的activity新增:

android:windowsoftinputmode="adjustpan|statehidden"
這種方式很簡單,在一些需要編輯的頁面,可以將edittext頂起,解決了鍵盤可能遮擋的問題。

但是它還存在乙個問題,就是他只能「頂起」輸入部分,比如乙個聊天頁面,輸入框在下方,我們希望的是,當鍵盤彈出的時候,將底部整個輸入部分的view全部頂起,而不單單是不遮擋輸入內容這麼簡單。

下面來簡單說一下解決方案,「頂起」之所以加引號,是因為鍵盤並不是真正的將控制項頂起來了,鍵盤是在檢視的最上層,我們可以自定義乙個需要適配鍵盤彈出和隱藏的view,來改變view的高度,達到所謂的彈出軟鍵盤「頂起」view的效果。如圖:

以下示例為kotlin,只做了最簡單的適配示例,如果需要實現個性化需求,可自行修改。

自定義乙個控制項inputpanelview,監聽鍵盤彈出高度。

package ……

import android.content.context

import android.graphics.rect

import android.util.attributeset

import android.view.layoutinflater

import android.view.view

import android.widget.relativelayout

import kotlinx.android.synthetic.main.view_input_panel.view.*

class inputpanelview(context: context?, attrs: attributeset?) : relativelayout(context, attrs)

init

}private fun resetheight(keyboardheight: int)

0 < keyboardheight && rl_extra_view?.visibility == view.gone -> }}

}

自定義viewview_input_panel.xml

<?xml version="1.0" encoding="utf-8"?>

xmlns:android

=""=""

xmlns:tools

=""android:layout_width

="match_parent"

android:layout_height

="wrap_content"

>

android:id

="@+id/ll"

android:layout_width

="match_parent"

android:layout_height

="@dimen/y114"

android:background

="@android:color/white"

android:minheight

="@dimen/y114"

android:orientation

="horizontal"

>

android:layout_width

="0dp"

android:layout_height

="match_parent"

android:layout_weight

="1"

android:background

="@android:color/transparent"

android:hint

="請輸入訊息..."

android:inputtype

="text"

android:paddingstart

="@dimen/x30"

android:paddingend

="@dimen/x30"

android:textcolor

="#222222"

android:textcolorhint

="#bdbdbd"

android:textsize

="@dimen/s30"

/>

android:id

="@+id/ib_red_packets"

android:layout_width

="@dimen/x114"

android:layout_height

="match_parent"

android:background

="@android:color/transparent"

android:contentdescription

= android:src

="@mipmap/icon_chat_room_red_packets"

/>

android:id

="@+id/ib_send"

android:layout_width

="@dimen/x114"

android:layout_height

="match_parent"

android:background

="@android:color/transparent"

android:contentdescription

= android:src

="@mipmap/icon_chat_room_send"

/>

linearlayout

>

android:id

="@+id/rl_extra_view"

android:layout_width

="match_parent"

android:layout_height

="wrap_content"

android:layout_below

="@id/ll"

android:visibility

="gone"

>

relativelayout

>

relativelayout

>

android 預設彈出軟鍵盤

網上搜了下答案基本上都是 inputmethodmanager im inputmethodmanager getsystemservice input method service im.showsoftinput scoreedittext,0 scoreedittext焦點也獲取了,但就是怎麼...

android 下軟鍵盤隱藏和彈出

方法一 在androidmainfest.xml中選擇哪個activity,設定windowsoftinputmode屬性為adjustunspecified statehidden 例如 android windowsoftinputmode adjustunspecified statehidd...

android避免彈出軟鍵盤遮蓋listview

做開發的時候,我們常常把listview放中間,然後底部放置乙個edittext控制項,這樣導致editext控制項獲得焦點的時候,輸入法彈出,edittext控制項上移,擋住了listview的部分資料,這樣不太美觀。所以,我們需要讓listview也跟著上移,所以需要 方法一 在xml檔案中,設...