最近項目需要做一個類似聊天室的模塊,基於Socket實現的,這部分稍后一段時間再做總結,功能上的相關點都實現了小例子也做出來了,最后發現一個比較膩歪的問題就是軟鍵盤彈出時總是會把標題“擠出”屏幕,(無論標題是寫在布局中還是仿照theme的方式添加到style中),輸入時有失觀賞如下圖:
隱隱感覺之前項目一直有類似問題,只不過一般只在登陸界面,無傷大雅,用戶輸入后一掠而過,可以忽略,但這個頁面這么處理確實不太美觀。
查了下此類問題大致兩種思路解決:
一、調整布局在底層使用ScrollView組件,將需要固定的布局(標題)寫在Scrollview之外。
二、在manifest配置文件中設置Activity屬性。
第一種方法未做嘗試,可行性有待定論,下面主要說下第二種:
activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋問題,有個屬性設置android:windowSoftInputMode,這個屬性能影響兩件事情:
1、當有焦點產生時,軟鍵盤是隱藏還是顯示
2、是否減少活動主窗口大小以便騰出空間放軟鍵盤
它的設置必須是下面列表中的一個值,或一個”state…”值加一個”adjust…”值的組合。在任一組設置多個值——多個”state…”values,例如&mdash有未定義的結果。各個值之間用|分開。例如:
<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,這個屬性偏於以軟鍵盤為重點