最近項目須要作一個相似聊天室的模塊,基於Socket實現的,這部分稍後一段時間再作總結,功能上的相關點都實現了小例子也作出來了,最後發現一個比較膩歪的問題就是軟鍵盤彈出時老是會把標題「擠出」屏幕,(不管標題是寫在佈局中仍是仿照theme的方式添加到style中),輸入時有失觀賞以下圖:android
隱隱感受以前項目一直有相似問題,只不過通常只在登錄界面,無傷大雅,用戶輸入後一掠而過,能夠忽略,但這個頁面這麼處理確實不太美觀。佈局
查了下此類問題大體兩種思路解決:性能
1、調整佈局在底層使用ScrollView組件,將須要固定的佈局(標題)寫在Scrollview以外。spa
2、在manifest配置文件中設置Activity屬性。blog
第一種方法未作嘗試,可行性有待定論,下面主要說下第二種:ci
activity主窗口與軟鍵盤的交互模式,能夠用來避免輸入法面板遮擋問題,有個屬性設置android:windowSoftInputMode,這個屬性能影響兩件事情:it
一、當有焦點產生時,軟鍵盤是隱藏仍是顯示配置
二、是否減小活動主窗口大小以便騰出空間放軟鍵盤方法
它的設置必須是下面列表中的一個值,或一個」state…」值加一個」adjust…」值的組合。在任一組設置多個值——多個」state…」values,例如&mdash有未定義的結果。各個值之間用|分開。例如:im
<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >
在這設置的值(除"stateUnspecified"和"adjustUnspecified"之外)將覆蓋在主題中設置的值
各值的含義:
stateUnspecified:軟鍵盤的狀態並無指定,系統將選擇一個合適的狀態或依賴於主題的設置
stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裏的狀態,不管是隱藏仍是顯示
stateHidden:用戶選擇activity時,軟鍵盤老是被隱藏
stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也老是被隱藏的
stateVisible:軟鍵盤一般是可見的
stateAlwaysVisible:用戶選擇activity時,軟鍵盤老是顯示的狀態
adjustUnspecified:默認設置,一般由系統自行決定是隱藏仍是顯示
adjustResize:該Activity老是調整屏幕的大小以便留出軟鍵盤的空間(能夠顯示所有屏幕)
adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能老是看到輸入內容的部分(軟鍵盤會遮擋屏幕)
下面是其中兩個屬性的效果圖:
1.adjustResize這種也是想要達到的效果
2.adjustPan,這個屬性偏於以軟鍵盤爲重點