Honeycomb (3.1)的adjustResize不再起作用?

11

我的应用程序具有android:windowSoftInputMode="adjustResize"属性,并且在Android 2.1上表现正常:

软键盘出现之前

软键盘出现之前的截图

打开键盘

Android 2.1中键盘的行为(良好)

然而,在Honeycomb中,软键盘不会调整我的布局大小,而是覆盖了按钮:

Honeycomb中的键盘行为(不好)

在10英寸的Galaxy Tab和Motorola Xoom上都有相同的行为。

我已经多次重新设计我的布局以使其与Honeycomb兼容,但无济于事。软键盘只会推动EditText视图,而不是按钮。

这里有一个演示问题的简单应用程式项目。

编辑:链接已修复。

使用的布局:

<?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">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true">
        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save" />
        <Button
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancel" />
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="fill_parent" />
    </ScrollView>
</RelativeLayout>
我发现唯一相关的问题是这个,但禁用硬件加速对我没有任何影响。我还阅读了Android指南,使您的应用程序兼容输入方法,但在那里没有找到任何解决方案。
我是否做错了什么显而易见的事情?或者这是一个有更多信息的错误吗?

可能相关:如果将Scrollview的高度设置为fill_parent,在Honeycomb上,按钮会变得无法点击,因为Scrollview覆盖了按钮并且它们失去了焦点。但在2.1版本中不会出现这种情况。 - Nathan Fig
在3.1的模拟器上,无论是否使用android:windowSoftInputMode,它对我来说似乎都很正常。我所做的就是创建一个新项目,并用你的布局替换了main.xml。我无法下载你的示例项目。 - Nicklas A.
@Nicklas Odd,在模拟器中我发现3.1和2.1都存在这个问题:软键盘会遮挡按钮。我已经更正了链接。 - Nathan Fig
3个回答

14

你好,我已经查看了你的代码。

请在"AndroidManifest.xml"中删除以下行:

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

然后检查并调整您的屏幕大小。

如果有任何疑问,请告诉我。


哇,你说得对 - 那个主题确实破坏了3.1版本的调整大小功能!那是为什么呢?我现在要寻找另一种全屏解决方案,但非常感谢你的提示! - Nathan Fig
我已确认在Honeycomb中,主题的全屏部分会破坏它-这很合理,因为Honeycomb应用程序都是“全屏”的。尽管如此,我仍然需要该设置,因为我正在针对2.1进行开发,而Honeycomb似乎在向后兼容方面存在问题。如果有机会,我可能会提交一个错误报告。再次感谢! - Nathan Fig
Nathan,你提交了这个错误报告吗? - Jeremy Haberman
不,我从来没有处理过这个问题 - 我猜这意味着问题仍然存在,很抱歉我没有采取措施来避免你遭受同样的痛苦 :( 你要提交一个错误报告吗?还是我来处理? - Nathan Fig

3

adjustResize模式肯定有效;您将在整个UI中看到它的效果。

那么问题是:为什么它没有被设置为您的应用程序?

第一件事,您可以使用“adb shell dumpsys window”查看有关窗口的信息,其中包括其WindowManager.LayoutParams设置的软输入模式。打印的值是原始数字;请在此处查看其含义:http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_NOTHING

如果您的窗口实际上没有调整大小,则需要深入了解并查看为什么没有设置。除了正常情况下,如果在活动上设置该模式,它将像往常一样设置在窗口上。您需要寻找其他导致窗口更改的原因。

如果您的窗口确实选择了adjustResize,则由于某种原因,您的视图层次结构实际上没有调整大小。我不知道平台中可能会导致这种方法无法工作的主要差异(而且再次可以看到它在股票UI中确实起作用)。在这里我建议做的第一件事就是使用HierarchyViewer查看您的视图层次结构中发生了什么。


非常感谢 - 在窗口转储中似乎没有设置标志。正在努力查找问题... - Nathan Fig
Dianne,你能告诉我们为什么那个主题禁用了那个标志吗? - nmr

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接