【问题标题】:Honeycomb (3.1) adjustResize no longer working?Honeycomb (3.1) adjustResize 不再工作?
【发布时间】:2011-09-29 18:30:47
【问题描述】:

我的活动有 android:windowSoftInputMode="adjustResize" 并在 Android 2.1 中相应地表现:

软键盘出现之前

带键盘

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

在 10 英寸 Galaxy 选项卡和摩托罗拉 Xoom 上的行为相同。

我已经多次修改我的布局,试图让它与 Honeycomb 兼容,但无济于事。软键盘将向上推一个 EditText 视图,但不是按钮。

Here is a simple app project demonstrating the problem.

编辑:链接已修复。

使用的布局:

<?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>

我发现的唯一相关问题是this,但禁用硬件加速对我没有影响。我还阅读了Android guide on making your app compatible with input methods,但没有找到任何解决方案。

我做错了什么吗?或者这是一个有更多信息的错误?

【问题讨论】:

  • 可能相关:如果您将 Scrollview 高度设置为 fill_parent,则在 Honeycomb 中,按钮变得不可点击,因为 Scrollview 与按钮重叠并且它们失去焦点。但 2.1 中的情况并非如此。
  • 在 3.1 的模拟器中,无论有无 android:windowSoftInputMode,对我来说似乎都可以正常工作。我所做的只是创建一个新项目并将 main.xml 替换为您的布局。我无法下载您的示例项目。
  • @Nicklas Odd,在模拟器中我发现 3.1 和 2.1 都存在问题:软键盘覆盖了按钮。我更正了链接。

标签: android layout resize android-3.0-honeycomb android-softkeyboard


【解决方案1】:

当您的活动处于全屏模式时,adjustResize 将失败,如下所示:https://code.google.com/p/android/issues/detail?id=5497&can=1&q=honeycomb%20fullscreen&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

我找到了一个对我有用的解决方法,您可能想尝试一下: https://stackoverflow.com/a/19494006/1241783

干杯

【讨论】:

    【解决方案2】:

    您好,我已经检查了您的代码。

    请删除“AndroidManifest.xml”中的以下行

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

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

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

    【讨论】:

    • 哇,你是对的 - 这个主题确实打破了 3.1 中的大小调整!现在为什么会这样?我现在正在寻找替代的全屏解决方案,但非常感谢您的提示!
    • 我已经确认,在 Honeycomb 中破坏它的是主题的全屏部分——考虑到 Honeycomb 应用程序都是“全屏”的,这是有道理的。尽管如此,我仍然需要该设置,因为我的目标是 2.1,Honeycomb 似乎在那里缺乏向后兼容性。有机会时可能会提交错误报告。再次感谢!
    • Nathan,您为此提交了错误报告吗?
    • 不,我从来没有考虑过 - 我猜这意味着这仍然是一个问题,抱歉我没有采取措施让你免于同样的痛苦:(你会提交错误报告或我要继续吗?
    • 相信这里已经解决了code.google.com/p/android/issues/…
    【解决方案3】:

    adjustResize 模式绝对有效;您将在整个 UI 中看到它的运行情况。

    所以问题是:为什么没有为您的应用设置它?

    首先,您可以使用“adb shell dumpsys window”查看有关您的窗口的信息,其中包括由其 WindowManager.LayoutParams 设置的软输入模式。那里打印的值是原始数字;在这里寻找它的含义:http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_NOTHING

    如果您的窗口实际上没有adjustResize,那么您需要深入了解为什么没有设置。其他一切正常,如果您在活动上设置该模式,它将像往常一样在窗口上设置。你会想要寻找你正在做的其他事情导致它在你的窗口中被改变。

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

    【讨论】:

    • 非常感谢 - 窗口转储中似乎没有设置标志。试图找出问题...
    • Dianne,你能告诉我们为什么主题会禁用那个标志吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2019-06-16
    • 2013-03-16
    • 2012-04-11
    • 2018-06-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多