软键盘显示时如何保持背景图像大小

当软件键盘显示时,它会调整我的布局大小,从而将背景图像压缩在一起。 我的问题基本上是这个问题的重复,这是以一种非常好的方式解释的:

软件键盘在Android上调整背景图像的大小

然而,当他们find解决问题的黑客时,这个问题就被关闭了。 我不能用这个黑客。 我的整个布局都在ScrollView中,我需要能够始终正确使用此scrollview。 通过使用android:windowSoftInputMode =“stateVisible | adjustPan”,用户将无法向下滚动并在键盘显示时看到屏幕底部,因为布局将部分存在于键盘后面。 因此,解决方案对我来说是不可接受的。 那里有更好的解决方案吗?

干杯,

  • Android BroadcastReceiver onReceive在MainActivity中更新TextView
  • 在onPause之后,PhoneGap继续在Android上运行
  • 如何更改Android警报对话框的背景?
  • 如何设置android应用程序的背景?
  • 更改按钮android:背景到不同的drawable
  • 如何使图像填充RelativeLayout背景而不拉伸
  • android,background,layer-list和可伸缩位图项
  • 如何定位径向渐变背景
  • 我不久前遇到过类似的问题。 不过,我偶然发现了一些正确的答案。

    在此项目的Android清单中,附加到您正在使用的特定活动,请在活动标记中使用android:windowSoftInputMode="adjustPan|stateVisible"

    adjustPan基本上意味着你的活动不会调整自身以适应软键盘,而stateVisible意味着软键盘会在请求时显示(如果需要,可以是stateAlwaysVisible等)

    来源: Android Dev for Activity标签

    经过几天的硬核黑客攻击后,我终于设法构建了一个解决方案,如此先进,它实际上可能会让人感到害怕。 我将一个带有背景的ImageView放在scrollview后面,并设置scaleType =“matrix”,这样当显示键盘时它不会缩小。

     < ?xml version="1.0" encoding="utf-8"?>         

    您可以使用windowBackground属性,这使得drawable适合整个屏幕。 要做到这一点,你需要:

    1-创建一个样式:

      

    2-在AndroidManifest.xml中设置您的活动样式

      

    当我遇到这个时,我正在谷歌上搜索这个确切问题的解决方案,经过一些研究后我发现了一个我觉得稍微好一点的解决方案。 您可以在活动中使用此function,而不是使用ImageView进行黑客攻击:

      getWindow().setBackgroundDrawableResource(R.drawable.bg_my_background); 

    希望它可以帮助其他人寻找解决方案。

    我不能评论你的答案,但我想补充一些东西。

    我理解您的困境以及为什么您链接的解决方案不是您的情况的完整解决方案(因为您无法滚动到视图的底部)。 我有一个类似的情况与一个大的可滚动EditText框。 当popup软键盘时,我不喜欢背景被压扁。

    我已经尝试过你的解决方案,虽然乍一看似乎有效,但在某些情况下它可能并不理想:

    1. 如果您允许应用程序采用横向模式,则背景将不会resize/拉伸
    2. 如果您在具有更大屏幕或dpi的设备上运行应用程序,您的背景可能无法填满屏幕

    基本上似乎当你将scaleType设置为matrix你告诉Android以1:1绘制背景而不是缩放。 所以当您使用解决方案打开软键盘时发生的情况是,您的scrollViewscrollView都像往常一样resize,但您设置的图像src仍然是1:1因此继续显示相同的区域。

    因此,例如,如果您的背景图像设置为特定尺寸(例如480 x 800)并且它完美地填充了您的Nexus One,那么当您旋转到横向时,您将在右侧有一个黑色区域。

    当然,如果你的背景只是一个重复的模式,这是没有实际意义的,在这种情况下,你可以使它非常大,并希望补偿各种屏幕(甚至平板电脑)。

    或者您也可以为不同的屏幕尺寸/密度/方向提供不同的背景,但这仍然不考虑缩放。

    为了尝试解决这个问题徒劳无功,我偶然发现了一个名为android:isScrollContainerView属性。 此属性告诉某些视图是否允许它们在显示软键盘时resize。 您链接的解决方案中的某人也会提到这一点。 我已经尝试在包含我的背景的ViewGroup上设置此(为假),但滚动的任何子元素都会覆盖它,导致再次压扁。

    截至目前,我不认为我们的情况有完整的解决方案。 你肯定会在某些情况下工作,我感谢你的努力。 希望Google将来会提供解决方案,但我认为他们不会认为这是一个问题/优先事项。

    在Androidmanifest中的活动标签使用:

      

    检查Android Developer参考

    也许还有另一个(非常简单!)解决方案:在styles.xml中:创建一个这样的新样式:

      

    AppBaseTheme是您常用的应用主题。 然后你添加Manifest.xml:

       

    所以你有相同的风格,但有背景。

    重要提示:不要在普通的.xml文件中设置任何背景!

    这是我的第一篇文章,我希望它对我的英语有所帮助和抱歉。

    如何将’背景’作为布局的解决方案呢? 我们可以膨胀布局,使其成为整个窗口大小,然后将其作为窗口背景插入吗?

    经过大量的搜索…

    在每个Activity中放置android:windowSoftInputMode="adjustPan|stateVisible"