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

时间:2018-06-21 10:55:07

标签: android android-layout footer android-relativelayout

我有这个布局:

enter image description here

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

  • 标签的布局(单独的xml文件)
  • RelativeLayout 1围绕着其他一切
  • A,B,C在RelativeLayout 2中都有自己的LinearLayout
  • 水平线D(在LinearLayout中)和“确定”按钮具有自己的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和“确定”按钮被键盘覆盖
  • 4仍然被推高

2 个答案:

答案 0 :(得分:1)

我设法找到了方法! :)非常感谢Umair向我提供ScrollView的技巧,并测试了不同的东西!

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

  • 环绕RelativeLayout 1(没什么特别的,没有android:fitsSystemWindows="true"-ScrollView似乎仍然禁用了它!)
    • 新ScrollView
      • 新的RelativeLayout(ScrollView只能包含一个元素!)
        • RelativeLayout 2
          • LinearLayout A(TextView + EditText)
          • LinearLayout B(TextView + EditText)
          • LinearLayout C(TextView + EditText)
          • “保存”按钮
        • RelativeLayout 3
          • LinearLayout D(TextView + EditText +“确定”按钮)
    • 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"一样)

答案 1 :(得分:0)

这就是我的想法:无论我多么努力地尝试在设备/仿真器上使用键盘始终位于layout 3的底部,我检查的设备高度从 4.7 inches min开始< / strong>。而且,如果您将adjust:resize放在清单文件中,它将始终在键盘顶部上显示最后一个布局。但是,如果您放置adjust:nothing,那么即使您要在其上写一些内容,您的底部布局也不会显示。如果您将adjust:adjutPan放进去,它将像您说的那样将您的布局推到顶部。现在进入keyboard part

如果要测量高度或检查键盘是否覆盖了布局,则需要测量屏幕和键盘的高度并找出差异。看一下这个问题。

How to check visibility of software keyboard in Android?

基于该结果,您可以显示或隐藏布局。

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