2011-05-11 40 views
22

当软键盘显示,它会调整我的布局,从而共同挤压的背景图像。我的问题基本上是这个问题,这是一个非常好的方式解释的副本:如何保持的背景图像大小时,软键盘显示

Software keyboard resizes background image on Android

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

干杯,

回答

25

后骨灰级黑客的日子,我终于成功地构建解决方案,以便推进它实际上可能伤害读它。我放置一个带有滚动视图后面背景的ImageView,并设置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> 
+1

我们不能把矩阵作为一个规模型,它影响了图像缩放特性,而在我来说,我需要fitCenter。 – 2017-06-22 12:01:35

7

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

我理解你的困境,为什么您链接到该解决方案是不是适合自己情况的完整解决方案(因为你不能滚动到视图的底部)。我有一个类似的情况与一个大的可滚动EditText框。当软键盘弹出时,我不喜欢我的背景被挤压。

我已经试过您的解决方案,而在它出现的工作乍看之下,也有一些情况下可能不是很理想:

  1. 如果你让你的应用程序中有一个风景模式,背景将不调整/拉伸
  2. 如果您运行具有较大的屏幕或DPI设备上的应用程序,你的背景可能无法填满屏幕

基本上看来,当你设置scaleTypematrix你牛逼elling Android以1:1的比例绘制背景,而不是按比例绘制。因此,当您使用您的解决方案打开软键盘发生的事情是,你scrollViewimageView都面临调整大小如常,但src时,您设定的图像保持1:1这样继续显示相同的区域。

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

这是没有实际意义的,当然,如果你的背景是简单重复的图案,在这种情况下,你可以把它非常大,希望弥补各种屏幕(甚至片)。

或者你也可以提供针对不同屏幕尺寸/密度/取向不同的背景,但是这仍然不占比例。

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

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

30

我在不久之前遇到过类似的问题。尽管如此,我偶然发现了一些工作的正确答案。

在你的Android清单此项目,连接到您正在使用的具体活动,使用线android:windowSoftInputMode="adjustPan|stateVisible"在活动标签。

adjustPan基本上意味着你的活动不会调整自身以适应软键盘,并stateVisible意味着软键盘会显示要求时(这可能是stateAlwaysVisible等如有必要)

来源: Android Dev for Activity tags

+8

这并不能解决OP的问题。他特别提到这个解决方案不适合他的情况,因为他需要'scrollview'的底部可见/可达。想象一下,尝试输入一条长信息而不能在几行后看到你正在输入的内容。有了这个解决方案,因为活动本身不会调整大小,所以你会错过最后几行,因为它们隐藏在键盘后面。 – 2012-02-23 20:15:42

21

您可以使用windowBackground属性,它使可绘制适合整个屏幕。 要做到这一点,你需要:在AndroidManifest.xml

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

2-设置您的活动风格

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

看起来像最好的解决方案,谢谢。它对我来说很好。 – ernazm 2014-06-24 15:18:19

+0

这个真的对我没有任何副作用。谢谢! – myforums 2014-11-10 22:32:36

+0

运行良好,谢谢! – mrmamon 2014-12-26 09:56:14

8

我在google搜索解决:

1-创建样式这个确切的问题,当我遇到这个问题时,在做了一些研究之后,我发现了一个我认为稍微好一点的解决方案。您可以使用ImageView进行黑客攻击:

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

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

1

怎么样解决方案,其中“背景”是一个布局。我们可以膨胀一个布局,使其成为整个窗口大小,然后将其作为窗口背景插入?

7

也许还有另外一个(真的很简单!)解决方案: 在styles.xml: 创建一个新的风格是这样的:

<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文件!

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

+1

因此,您的第一篇文章是非常有帮助的。 – CoolMind 2015-08-14 08:39:09

0

了大量的时间搜索后...

android:windowSoftInputMode="adjustPan|stateVisible"每个Activitys

相关问题