折叠布局但在底部保留另一个布局

问题描述 投票:2回答:2

我有这个布局:

enter image description here

没有颜色:https://i.stack.imgur.com/OdSda.png

  • 选项卡的布局(单独的xml文件)
  • RelativeLayout 1包围其他一切
  • A,B,C在RelativeLayout 2中都有自己的LinearLayout
  • 水平线D(在LinearLayout中)和“OK”按钮有自己的RelativeLayout 3
  • 对于E,还有RelativeLayout 4(= footer)

如果我点击D旁边的EditText并打开键盘,我想要发生什么:

  • 4留在底部,隐藏在键盘后面
  • 如果没有足够的空间来完全显示3,则折叠2直到键盘再次关闭

实际发生了什么:

  • 2留在原处
  • 键盘覆盖3中途,我无法看到我正在键入的内容
  • 将4向上推并覆盖D.

我已经尝试了两件事,但两件事并没有像预期的那样完全发挥作用:

I)将android:windowSoftInputMode="adjustPan"添加到清单:

  • 4留在底部但是
  • 其他所有东西都被推了,所以2,3和标签然后被覆盖了一半

II)将android:windowSoftInputMode="adjustResize"添加到清单:除非我还将android:fitsSystemWindows="true"添加到选项卡片段的xml中,否则没有任何变化:

  • 现在忽略周围RelativeLayout 1的所有填充
  • D旁边的EditText被推向2但不可读,D和键盘覆盖了“OK”按钮
  • 4仍然被推高
android android-layout footer android-relativelayout
2个回答
1
投票

我找到了办法! :)非常感谢Umair向我提供了ScrollView的提示并测试了不同的东西!

首先,这就是现在整体布局的构建方式:

  • 周围的RelativeLayout 1(没什么特别的,没有android:fitsSystemWindows="true" - ScrollView似乎禁用了它!) 新的ScrollView new RelativeLayout(ScrollView只能包含一个元素!) RelativeLayout 2 LinearLayout A(TextView + EditText) LinearLayout B(TextView + EditText) LinearLayout C(TextView + EditText) “保存”按钮 RelativeLayout 3 LinearLayout D(TextView + EditText +“OK”按钮) RelativeLayout 4(TextView E)

表现:

<activity android:name=".MainActivity"
    android:windowSoftInputMode="adjustResize"
....

RelativeLayout 4的代码:

之前:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom">
    <TextView
        android:id="@+id/textE"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/E"
        android:textSize="20sp"/>        
</RelativeLayout>

后:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    android:layout_below="@id/ScrollViewABCD"
    android:gravity="bottom">
    <TextView
        android:id="@+id/textE"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/E"
        android:textSize="20sp"/>
</RelativeLayout>

我不确定是否真的需要android:layout_gravity="bottom"android:gravity="bottom"将文本放在底部!)但是我没有注意到它没有任何变化。

android:layout_alignParentBottom="true"是这里的重要部分,因为如果没有它,相对布局4将简单地位于ScrollView下方,但是这个额外的小额使得它可以占用它所能容纳的所有空间,同时仍然尽可能地将它保持在尽可能远的地方。另外,您仍然可以使用边距在ScrollView和RL 4之间创建一些空白区域(即使您只是在Android Studio的预览窗口中看到它)。

这是做什么的:

  • ScrollView可以使用
  • 键盘始终位于ScrollView下方
  • 如果没有足够的空间来显示ScrollView和键盘,则前者变为可滚动
  • RelativeLayout 4总是隐藏在键盘后面
  • 标签保持原样
  • RelativeLayout 1的填充不会被忽略(就像使用android:fitsSystemWindows="true"一样)

0
投票

所以这就是我想出来的:无论我在我的设备/仿真器上尝试键盘有多么努力,总是在layout 3I检查设备的底部,高度从4.7 inches min开始。如果你将adjust:resize放在清单文件中,它将始终显示键盘顶部的最后一个布局。但是如果你放adjust:nothing,那么即使你想在它上面写东西,你的底部布局也不会出现。如果你把adjust:adjutPan然后它会像你说的那样将你的布局推到顶部。现在来到keyboard part

如果你想要高度或检查你的键盘是否覆盖你的布局,那么你需要采取屏幕和键盘的高度,找出差异。看看这个问题。

How to check visibility of software keyboard in Android?

在该结果的基础上,您可以显示或隐藏您的布局。

注意:如果您想要您的要求,则必须设计自定义布局。

© www.soinside.com 2019 - 2024. All rights reserved.