gpt4 book ai didi

android - 键盘打开时,带有 fragment 的 Activity 不会调整大小

转载 作者:IT老高 更新时间:2023-10-28 23:08:29 24 4
gpt4 key购买 nike

在我的主要 Activity 中,有一个 RelativeLayout 有 2 个 child :

  • 作为背景的ImageView
  • 具有 2 个 fragment 容器的 LinearLayout

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
tools:context="${packageName}.${activityClass}">

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:baselineAlignBottom="false"
android:scaleType="fitStart"
android:src="@drawable/bg_image" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="?android:attr/actionBarSize"
android:layout_alignParentBottom="true">

<LinearLayout
android:id="@+id/ContainerA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" />

<LinearLayout
android:id="@+id/ContainerB"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_gray"
android:orientation="vertical" />

</LinearLayout>
</RelativeLayout>

容器 A 只是显示一个不会改变的 fragment 。
但是,容器 B 包含一个 fragment ,该 fragment 会根据用户点击而发生变化。

容器 B 有两种变化:

  • 它可以扩展(从大约 70% 的高度到全高)。
  • 它会改变 fragment 。

Container B 可以容纳的 fragment 之一是一个表单,其中包含 EditText 和其他 View 。

我的问题是当键盘打开时我无法让 Activity 调整大小。
我在 list 文件中设置了 adjustResize 并且我的主题不是全屏主题(这显然是导致此问题的原因)。我还尝试编辑 View ,添加 ScrollViews 但绝对没有任何效果。

我用于此 Activity 的主题是来自 AppCompat 库的带有深色操作栏的浅色主题。我只编辑了主题以允许覆盖操作栏。这不是问题,因为我已经尝试删除这些编辑但无济于事。

Here's a link to the form layout

TL;DR adjustResize/adjustPan 对我不起作用。搜索,尝试了各种解决方案,没有任何效果。我的问题是;我的情况是什么原因造成的?

更新:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>

<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="19" />

<application ... android:theme="@style/AppTheme">
<activity android:name=".SplashScreenActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|screenSize" android:label="@string/app_name"
android:screenOrientation="portrait" android:theme="@style/OverlayActionBarTheme"
android:windowSoftInputMode="adjustResize" />
<activity android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".MainActivity"
android:windowSoftInputMode="adjustResize">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>

</manifest>

更新 2:
我创建了一个全新的应用程序,添加了我的表单布局作为主布局,并测试了问题是否出在布局本身。事实证明,即使在这个新创建的应用程序上,它似乎也没有调整大小。

如上所述,可以找到布局的链接 Here

更新 3:我设法通过用 ScrollView 包围整个布局使其在新应用程序上运行。由于某种原因,我无法在原始应用中复制相同的效果......仍在试图找出原因。

最佳答案

当屏幕上出现软键盘时,应用程序 UI 的可用空间量会减少。系统决定如何组织应用程序的 UI 和软键盘之间的可用空间。

  • 如果窗口内容包含 ListViewScrollView,则应用程序的窗口会调整大小,前提是所有内容都可见。
  • 如果调整大小不可行,则使用 pan and scan 方法,该方法仅涉及滚动应用程序的窗口以使当前聚焦的 View 可见。

由于您的布局不包含任何 ListViewScrollView,因此排除了调整大小的可能性。

窗口的 Root View 是您最初添加 LinearLayoutFrameLayout。由于LinearLayout 不支持滚动,所以也排除了pan and scan 的方式。因此,将布局包裹在 ScrollView 中解决了滚动问题。

您可以引用Android Developers blog了解更多详情。

更新 1:

OP 能够解决此问题,如 answer 中所示.问题的发生是因为一个 fragment 在动画之后覆盖了另一个 fragment ,并且这些 Fragment 的父级是 LinearLayout。出于叠加目的,您只需要使用 RelativeLayoutFrameLayout

关于android - 键盘打开时,带有 fragment 的 Activity 不会调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com