不希望遮擋設置activity屬性android:windowSoftInputMode="adjustPan"
希望動態調整高度android:windowSoftInputMode="adjustResize"
問題:
我原來的問題是,對於騰訊微博的OAuth驗證webView,彈出軟鍵盤后,輸入框上移就看不到輸入框了,后發現Webview放到了ScrollView中,將ScrollView改為LinearLayout問題解決了,不會在彈出軟鍵盤后大幅滾動。不過下面還是詳細介紹下軟鍵盤和activity頁面遮擋的問題。
詳細:
通常情況下如果我們在一個輸入框輸入內容,輸入法鍵盤彈出時,activity自動設置高度,相當於在activity向上滾動了添加了輸入法鍵盤的高度。但有時可能淹沒當前的輸入框,如果希望輸入法鍵盤彈出時不自動向上擠壓activity,在activty中設置屬性android:windowSoftInputMode="adjustPan",這樣輸入法可以覆蓋Activity顯示,如下:
- <activity android:name="testActivity"
- android:windowSoftInputMode="adjustPan">
設置屬性為android:windowSoftInputMode="adjustResize"即可自動調整高度。
屬性stateVisible表示默認顯示輸入法鍵盤,其他屬性見:android:windowSoftInputMode
adjustPan同樣存在問題,即可能需要關閉軟鍵盤,定位被擋住的輸入框,我希望的是介於adjustPan和adjustResize之間的解決方案,即軟鍵盤會對activity有一定擠壓,但是焦點所在輸入框始終會顯示在屏幕上,有會的朋友歡迎留言分享,個人覺得可能的解決方案是new一個LinearLayout,重寫其中的
- protected void onSizeChanged(int w, int h, int oldw, int oldh)
方法,使得h參數動態變化達到效果,但較耗時,暫不想嘗試了。
android:windowSoftInputMode
activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋問題,Android1.5后的一個新特性。
這個屬性能影響兩件事情:
【一】當有焦點產生時,軟鍵盤是隱藏還是顯示
【二】是否減少活動主窗口大小以便騰出空間放軟鍵盤
它的設置必須是下面列表中的一個值,或一個”state…”值加一個”adjust…”值的組合。在任一組設置多個值——多個”state…”values,例如&mdash有未定義的結果。各個值之間用|分開。例如:<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >
在這設置的值(除"stateUnspecified"和"adjustUnspecified"以外)將覆蓋在主題中設置的值
各值的含義:
【A】stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
【B】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity里的狀態,無論是隱藏還是顯示
【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【D】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
【E】stateVisible:軟鍵盤通常是可見的
【F】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
【G】adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
【H】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
【I】adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分