首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EditText显示状态栏,或者导致上面的内容移动而不是调整大小。

EditText显示状态栏,或者导致上面的内容移动而不是调整大小。
EN

Stack Overflow用户
提问于 2015-06-23 09:35:19
回答 2查看 3.8K关注 0票数 5

背景

我有一个登录活动,它具有这样的布局(垂直,从上到下):

  1. 标题(徽标ImageView和TextView)
  2. 图像和视图寻呼机,它占据了屏幕的其余部分
  3. EditTexts&登录按钮,出现在#2的顶部(覆盖其中的一部分),但显示在屏幕的底部

我需要有这个活动全屏,隐藏状态栏,当软键盘出现时,改变布局为上面所示的#3。

问题所在

这些要求的结合似乎是相当有问题的。

我与他们有两个主要问题:

  • 我为感测软键盘所做的--显示--似乎在这里不起作用,尽管它在其他活动中工作得很好。
  • 当软键盘出现时,它要么重新显示状态栏,要么将内容移动到底部区域(#3)之上,而不是调整其大小,同时也将按钮隐藏在底部( #3),并且只显示EditText作为软键盘上方的第一个视图。

由于没有办法真正为软键盘显示/隐藏时提供侦听器,所以我不得不创建一个定制布局,只需告诉我何时其大小发生了变化。当它的高度降低时,我假设显示了键盘,反之亦然。

我试过的

  • 我尝试过布局的多种变体。似乎帮不上忙
  • 我使用这个布局作为片段的根,以检查软键盘是否显示(因为它改变了大小):https://stackoverflow.com/a/25895869/878126很遗憾,它可以处理除此之外的所有其他活动。
  • 我尝试过各种"windowSoftInputMode“值,包括"adjustResize”和"adjustPan“
  • 我认为这些问题是因为我使用了一个透明的导航栏,所以我已经禁用了它,也禁用了底部区域(#3)的"fitsSystemWindows“。
  • 我试图用这种方法隐藏状态栏: 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);}VERSION_CODES.JELLY_BEAN

当前布局

下面是对当前布局的简短描述:

代码语言:javascript
运行
复制
<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>

这就是这次活动的主题:

代码语言:javascript
运行
复制
<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>

问题是

为什么隐藏状态栏不能持久工作,或者它会影响显示软键盘时显示的内容?

为什么我的定制布局不能感觉到软键盘显示了?

还有其他方法来达到我所尝试过的目标吗?

EN

回答 2

Stack Overflow用户

发布于 2015-08-05 14:09:17

通过执行以下两个步骤,我设法在软键盘显示时将状态栏隐藏起来:

  1. 在活动的onCreate中添加以下内容: //没有为活动设置标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);//为窗口getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN设置全屏);
  2. 在主题中将windowFullscreen设置为true

不幸的是,这不是一个完整的答案,但它可能会帮助你获得一些方式。

票数 10
EN

Stack Overflow用户

发布于 2019-08-20 11:28:45

除了将FLAG_FULLSCREEN添加到窗口之外,还可以清除FLAG_FORCE_NOT_FULLSCREEN -此标志:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30999110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档