我可以同时在状态栏后面有“adjustResize”软键盘行为和一个工具栏吗?

在我的Android应用程序中,对软键盘使用adjustResize行为至关重要。 所以用户可以向下滚动到其他UI元素,如“继续”button。

我注意到adjustResize只有当我在布局根元素中同时具有Manifest设置和android:fitsSystemWindows="true" 。 (如果我错了,请纠正我)

但是对于android:fitsSystemWindows="true" ,工具栏不再位于状态栏的后面。 这是完全合理的,但不是我想要的。

当工具栏位于其后面时,状态栏会有一个与我的工具栏颜色相匹配的较暗阴影。 我有什么与android:fitsSystemWindows="true"是一个无色的状态栏和一个工具栏,比我想要的低24dp。

为了adjustResize键盘的行为,我将放弃匹配的彩色状态栏。 但是我的问题是,两者都有可能吗? 敢我梦想着美丽和无障碍?

任何更有经验的人都知道设置的神奇组合? 或者,也许,作为一个解决方法,明确颜色的状态栏?

供参考:

这些是具有RelativeLayout根元素的活动,其中一些是ListViewEditText

工具栏是android.support.v7.widget.Toolbar

潜在的相关风格项目:

 <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowContentOverlay">@null</item> 

PS – 我已经读了几十个关于软键盘行为的类似问题,但无法find任何有助于工具栏意外效果的东西。 反之亦然,大量的有关工具栏/状态栏行为的样式问题,但没有任何看似相关的。 永远不要less,如果我错过了一些遗憾!

提前谢谢了!

编辑

我一直玩删除android:fitsSystemWindows="true"并添加更多的ScrollViews或试图让一切进入同一个ScrollView。 这什么都不做。

如果我删除了android:fitsSystemWindows="true"那么UI的底部就会“粘”到屏幕的底部 – 它不会“resize”,而是像我期望的那样粘到软键盘的顶部在清单中设置adjustResize

在根视图中设置android:fitsSystemWindows="true"会使UI调整为像我所期望的那样 – 但是它也使得工具栏不再被绘制在statusBar的后面。

所以我仍然是我开始:(

添加布局XML代码示例:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- CoordinatorLayout because this view uses SnackBars --> <!-- Relative Layout to lock "continue" button bar to bottom --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Main content, that scrolls with or without keyboard --> <!-- Correctly sits behind transparent Status Bar --> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/footer_persistent_height"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- ACTUAL VIEWS DELETED FOR BREVITY / CLARITY --> </RelativeLayout> </android.support.v4.widget.NestedScrollView> <!-- Bottom nav bar --> <!-- Correctly sits at bottom of UI when keyboard is not visible --> <!-- PROBLEM: Not accessible when soft keyboard is visible --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="?android:attr/buttonBarStyle"> <Button android:id="@+id/skip_button" android:theme="@style/ButtonContinueGrey" android:onClick="skipClickHandler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight=".5" style="?android:attr/buttonBarButtonStyle"/> <Button android:id="@+id/button_progress" android:theme="@style/ButtonContinueColored" android:onClick="continueClickHandler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight=".5" style="?android:attr/buttonBarButtonStyle"/> </LinearLayout> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> 

Solutions Collecting From Web of "我可以同时在状态栏后面有“adjustResize”软键盘行为和一个工具栏吗?"

尝试保持您的布局在滚动视图中,并删除android:fitsSystemWindows =“true”,并只使用resize

我没有正确地回答你的问题,但就我所能理解的解决问题而言,

对于填充问题尝试添加

 android:fitsSystemWindows="true" android:clipToPadding=”false” 

并为透明状态栏添加

 <item name="android:statusBarColor">@android:color/transparent</item> 

到你的AppTheme。 希望它有助于rest,请上传您的问题的截图,详细的问题观点。

(回答我自己的问题)

这似乎是在Android的错误: https : //code.google.com/p/android/issues/detail? id = 63777

上述错误报告的post链接到一些build议的解决方法,如创build自定义布局类或自定义软键盘。

我觉得我已经浪费了足够的时间。 所以我的解决scheme是手动上色状态栏。

解:

  1. 在Layout的根视图中或在style.xml中全局设置android:fitsSystemWindows="true" 。 这(与清单中的adjustResize一起)使得UI缩小到软键盘之上,所以没有UI被阻塞 – 最重要的事情。

  2. 为状态栏添加颜色。 这只是在Lollypop和更新的可能。 无论如何,这与透明的StatusBar是一样的。

     private void updateStatusBarColor(){ // Check Version if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // OPTIONAL: Calculate a darker version of the toolbar color int color = calculateDarkerColor(toolBarColor); // Get the statusBar Window window = getWindow(); // You can't color a transparent statusbar window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // Set the color window.setStatusBarColor(color); } } // Calculate a darker version of a given color // Note I do this because the color always changes, if it's always the same I would save the darker version as a Resource in colors.xml private int calculateDarkerColor(int color){ float[] hsv = new float[3]; Color.colorToHSV(color, hsv); hsv[2] *= 0.8f; // smaller = darker return Color.HSVToColor(hsv); } 

我已经解决了你的问题,并在我的最后testing。 请将您的相对布局更改为像这样的framelayout:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- CoordinatorLayout because this view uses SnackBars --> <!-- Relative Layout to lock "continue" button bar to bottom --> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <!-- Main content, that scrolls with or without keyboard --> <!-- Correctly sits behind transparent Status Bar --> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="24dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- ACTUAL VIEWS DELETED FOR BREVITY / CLARITY --> </RelativeLayout> </android.support.v4.widget.NestedScrollView> <!-- Bottom nav bar --> <!-- Correctly sits at bottom of UI when keyboard is not visible --> <!-- PROBLEM: Not accessible when soft keyboard is visible --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" style="?android:attr/buttonBarStyle" android:layout_gravity="bottom"> <Button android:id="@+id/skip_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight=".5" style="?android:attr/buttonBarButtonStyle"/> <Button android:id="@+id/button_progress" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight=".5" style="?android:attr/buttonBarButtonStyle"/> </LinearLayout> </FrameLayout> </android.support.design.widget.CoordinatorLayout>