『壹』 android WebView載入頁面的輸入框被軟鍵盤遮擋的問題
當實現沉浸式狀態欄時遇到軟體盤遮擋WebView頁面的輸入框的問題,這是實現方式有問題,應該檢查你的實現方式。
1)載入WebView的Activty不能設置為全屏模式,即Theme.NoTitleBar.Fullscreen,可以使用Theme.Holo.Light.NoActionBar
2)沉浸式狀態欄的實現方式,在Activity的根布局裡加兩個屬性:
android:clipToPadding="true" 設置你的繪制區域在padding裡面
android:fitsSystemWindows="true" 調整view的padding屬性為系統窗口 留出空間
在Activity的onCreate方法裡面設置標題欄為透明,即:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_ST ATUS);
3)Activity裡面不能設置android:windowSoftInputMode的屬性,使用默認的屬性即可
以上3步即可實現沉浸式狀態欄並且能保證你的WebView載入的HTML頁面的輸入框不被軟鍵盤遮擋。
頂
0
踩
0
上一篇 Android Studio在SVN上創建分支
下一篇 Android Converty問題解決方案
相關文章推薦
• android中webview載入html輸入框不能輸入內容問題記錄
• 如何解決Android軟鍵盤蓋住輸入框的問題
• Android 軟鍵盤蓋住輸入框的問題
• Android 軟鍵盤蓋住輸入框的問題
• Android 軟鍵盤蓋住輸入框的問題
• Android 軟鍵盤蓋住輸入框的問題
• Android 軟鍵盤蓋住輸入框的問題
• android popupwindow 中輸入框被軟鍵盤彈出擋住問題解決
• ios解決軟鍵盤遮擋輸入框問題
• Android軟鍵盤遮擋輸入框解決方法
參考知識庫
Android知識庫
34080 關注 | 2937 收錄
猜你在找
Android中的五大布局
零基礎學軟體之HTML語言
【Android APP開發】Android高級商業布局快速實現
html5的app開發
Android前沿技術—《軟體框架搭建》
Android移植基礎
html系統學習篇
零基礎學習HTML5—html+css基礎
Android開發之初窺門徑
Android之數據存儲
關閉
『貳』 Android 沉浸式/透明式狀態欄、導航欄
Android 從4.4開始引進透明狀態欄和導航欄的概念,並且在5.0進行了改進,將透明變成了半透明的效果。雖然此特性最早出現在ios,但不否認效果還是很贊的。
至於4.4以下的手機,就不要考慮此特性了,好在4.4以下的手機份額已經非常小了。
我們先來看一下透明狀態欄的實現,兩種常見效果圖如下:
虛擬導航欄並不是所有的手機都有,華為的手機多比較常見,就是上圖屏幕底部按鈕那塊區域。設置導航欄和狀態欄類似:
這是官方的解釋,大致意思就是我們在布局的最外層設置 android:fitsSystemWindows="true",會在屏幕最上方預留出狀態欄高度的padding。
由於fitsSystemWindows屬性本質上是給當前控制項設置了一個padding,所以我們設置到根布局的話,會導致狀態欄是透明的,並且和窗口背景一樣。
但是多數情況,我們並不在根布局設置這個屬性,我們想要的無外乎是讓內容沉浸在狀態欄之中。所以我們經常設置在最上端的圖片背景、Banner之類的,如果是Toolbar的,我們可以使用一層LinearLayout包裹,並把這個屬性設置給LinearLayout,這樣就可以避免Toolbar的內容下沉了。如:
上述方法可以解決普通頁面的透明式狀態欄需求,如有復雜需求可以參考下面這些:
Android 系統狀態欄沉浸式/透明化完整解決方案
Android 沉浸式狀態欄的實現
Android沉浸式狀態欄(透明狀態欄)最佳實現
還有開源庫推薦: ImmersionBar
『叄』 為什麼國內Android應用都不適配沉浸式狀態欄
簡單介紹
沉浸式是APP界面圖片延伸到狀態欄, 應用本身沉浸於狀態欄。當啟用該模式,應用程序的界面將占據整個屏幕,系統自動將隱藏系統的狀態欄和導航欄,讓應用程序內容可以在最大顯示範圍呈現。
常見問題
4.4及其以上都是可以實現沉浸式狀態欄效果的,5.0及其以上可以直接在主題中設置顏色,也可以調用Window類中的setStatusBarColor(int color)來實現,這兩種方式在5.0上都比較簡單。
圖片背景的頁面讓狀態欄透明及半透明。
『肆』 android studio怎麼做沉浸式狀態欄
studio,中引入沉浸式兼容庫
compile 『com.readystatesoftware.systembartint:systembartint:1.0.3』
eclipse,可以導入相應的那個類。
第一類,兼容actionbar
第一步:設置activity主題android:theme=」@style/ActionBarTheme」
<style name="ActionBarTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
</style>
<style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/actionbar_bg</item>
</style>
第二步:設置狀態欄透明,然後設置狀態欄沉浸的顏色
@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
//設置沉浸的顏色 tintManager.setStatusBarTintResource(R.color.statusbar_bg);}
第三步:設置適應windows,在布局文件設置
android:fitsSystemWindows=」true」
如果不設置,應用的ui會頂上去,頂進system ui
ok
第二類 沒有actionbar的activity
第一步,設置主題,android:theme=」@style/FullBleedTheme」
<style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
<style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor">
<!-- API 19 theme customizations can go here. -->
</style>
或者
用toolbar只能設置Theme.AppCompat.NoActionBar主題
<style name="AppThemeToolbar" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">#2196F3</item>
<item name="colorPrimaryDark">#2196F3</item>
<!--<item name="colorPrimaryDark">#1565C0</item>-->
<item name="colorAccent">#E91E63</item>
</style>
第二步:同上一個第二步。
設置狀態欄透明+顏色
mTintManager = new SystemBarTintManager(this);
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setNavigationBarTintEnabled(true); mTintManager.setStatusBarTintResource(R.color.statusbar_bg);