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

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

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

但是,当他们发现黑客要解决这个问题时,这个问题就被closures了。 我不能使用这个黑客。 我的整个布局是在一个滚动视图,我需要能够在任何时候正确使用这个滚动视图。 通过使用android:windowSoftInputMode =“stateVisible | adjustPan”,键盘显示时,用户将无法向下滚动并查看屏幕的底部,因为布局将部分存在于键盘后面。 因此,我的解决scheme是不能接受的。 那里有更好的解决scheme吗?

干杯,

Solutions Collecting From Web of "软键盘显示时如何保持背景图像的大小"

不久之前,我遇到了类似的问题。 不过,我偶然发现了一些正确的答案。

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

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

来源: Android Dev for Activity标签

经过几天的硬核攻击后,我终于设法构build了一个先进的解决scheme,可能会伤害到它的阅读。 我放置一个ImageView的背景后面的scrollview,并设置scaleType =“matrix”,使其不显示缩小键盘时收缩。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/mah_kewl_background" android:scaleType="matrix" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" > <RelativeLayout android:id="@+id/smsLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="PLUNX" /> </RelativeLayout> </ScrollView> </RelativeLayout> 

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

1-创build风格:

 <style name="Background" parent="@android:style/Theme.NoTitleBar"> <item name="android:windowBackground">@drawable/you_bg_drawable</item> </style> 

2-在AndroidManifest.xml中设置你的活动风格

 <activity android:name=".ui.your_activity" android:theme="@style/Background"/> 

当我遇到这个问题时,我正在search一个解决这个确切问题的方法,在做了一些研究之后,我发现了一个我认为稍好的解决scheme。 而不是用ImageView黑客攻击,你可以在你的活动中使用它:

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

希望它能帮助其他人寻找解决scheme。

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

我明白你的困境,为什么你链接的解决scheme不是一个完整的解决scheme(因为你不能滚动到视图的底部)。 我有一个类似的情况与一个大的可滚动的EditText框。 当软键popup时,我不喜欢我的背景被挤压。

我已经尝试了你的解决scheme,而乍一看似乎工作,有些情况下可能不理想:

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

基本上,当你将scaleType设置为matrix你告诉Android scaleType 1:1的比例绘制背景,而不是缩放。 所以当你使用你的解决scheme打开软键盘时,发生了什么事情,你的scrollViewscrollView都像往常一样resize,但是你设置的图像src保持1:1,因此继续显示相同的区域。

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

当然,如果你的背景只是一个重复的模式,那么你可以使它变得非常大,希望能够补偿各种屏幕(甚至是平板电脑)。

或者您也可以为不同的屏幕尺寸/密度/方位提供不同的背景,但是这仍然不能解释缩放。

妄图试图解决这个问题,我偶然发现了一个名为android:isScrollContainerView属性。 该属性告诉某些视图是否允许在显示软键盘时调整其大小。 这也是你的链接解决scheme中的人提到的。 我曾尝试在包含我的背景的ViewGroup上设置这个(为false),但是任何滚动的子元素似乎都会覆盖它,导致再次变形。

就目前而言,我认为我们的情况并不完整。 在某些情况下,你的工作肯定有效,我感谢你的努力。 希望Google能在未来提供解决scheme,但我不认为他们会认为这是一个问题/优先事项。

在activitymanifest中使用activity标签:

 <activity ... android:windowSoftInputMode="adjustPan" ></activity> 

检查Android开发人员参考

也许还有另外一个(非常简单的)解决scheme:在styles.xml中:创build一个新的样式:

 <style name="Yourstyle" parent="AppBaseTheme"> <item name="android:windowBackground">@drawable/mybackground</item> </style> 

AppBaseTheme是您的应用程序通常使用的主题。 然后在Manifest.xml中添加:

 <activity android:name="com.your.app.name.Activity" android:theme="@style/Yourstyle"> </activity> 

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

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

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

如果“背景”是布局的解决scheme如何。 我们可以膨胀一个布局,使它成为整个窗口大小,然后将其作为窗口背景插入?

经过大量的时间search…

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