問題簡單一帶而過,後面直接說解決思路,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檔案中,設...