背景
我有一个登录 Activity ,它具有这样的布局(垂直,从上到下):
- 标题(徽标 ImageView 和 TextView)
- 占据屏幕其余部分的 image&viewPager
- EditTexts&login 按钮,出现在#2 的顶部(覆盖其中的一部分),但在屏幕的底部
我需要让这个活动全屏,隐藏状态栏,当软键盘出现时,为上面显示的内容更改布局 #3 。
问题
似乎这些要求的组合是相当成问题的。
我有两个主要问题:
我为感应显示的软键盘所做的工作 - 似乎在这里不起作用,即使它在其他活动上运行良好。
当软键盘出现时,它要么重新显示状态栏,要么将内容移动到底部区域(#3)上方而不是调整大小,同时隐藏底部(#3)按钮并仅显示EditText 作为软键盘上方的第一个视图。
由于无法真正监听软键盘何时显示/隐藏,因此我必须创建一个自定义布局,它只会告诉我它的大小何时发生变化。当它的高度降低时,我假设显示键盘,反之亦然。
我试过的
- 我尝试了多种布局变体。似乎没有帮助
- 我已将此布局用作片段的根,以检查是否显示软键盘(因为它改变了它的大小): https ://stackoverflow.com/a/25895869/878126 遗憾的是,它适用于所有其他除了这一项之外的活动。
- 我尝试了各种“windowSoftInputMode”值,包括“adjustResize”和“adjustPan”
- 我认为问题是因为我使用了透明导航栏,所以我禁用了它并且还禁用了底部区域的“fitsSystemWindows”(#3)。
我试过这种方式来隐藏状态栏:
requestWindowFeature(Window.FEATURE_NO_TITLE);
也是这样:
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } else getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
目前的布局
这是当前布局的简短描述:
<LayoutSizeChangedSensorFrameLayout>
<RelativeLayout>
#1
<LinearLayout vertical, aligned to parent-top>
<ImageView/>
<TextView/>
<CirclePageIndicator/>
</LinearLayout>
#2
<ImageView aligned to parent-bottom, and below #1 />
<ViewPager aligned to the ImageView from all sides/>
#3
<LinearLayout vertical, aligned to the parent-bottom>
<TextView/>
<EditText/>
<Button/>
</LinearLayout>
</RelativeLayout>
</LayoutSizeChangedSensorFrameLayout>
这是活动的主题:
<style name="AppTheme.Material" parent="@style/Theme.AppCompat.Light.DarkActionBar">
...
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentNavigation" tools:ignore="NewApi">true</item>
<item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item>
<item name="android:navigationBarColor" tools:ignore="NewApi">@android:color/transparent</item>
</style>
问题
为什么隐藏状态栏不能永久起作用,或者它会影响显示软键盘时显示的内容?
为什么我的自定义布局感觉不到显示软键盘?
还有其他方法可以实现我尝试过的吗?