折叠布局但将另一个布局放在底部
Fold up a Layout but keep another at the bottom
我有这样的布局:
没有颜色:https://i.stack.imgur.com/OdSda.png
- 选项卡的布局(单独的 xml 文件)
- RelativeLayout 1 环绕其他一切
- A、B、C在RelativeLayout 2中都有自己的LinearLayout
- 水平线、D(在 LinearLayout 中)和 "OK" 按钮有自己的 RelativeLayout 3
- 还有 E
的 RelativeLayout 4(=页脚)
如果我单击 D 旁边的 EditText 并打开键盘,我希望发生什么:
- 4留在底部,隐藏在键盘后面
- 如果space不足以完全显示 3,则 2 会折叠,直到再次关闭键盘
实际上发生了什么:
- 2 保持原样
- 键盘盖了一半,看不清我在输入什么
- 4被推高覆盖D
有两件事我已经尝试过,但都没有按预期完全工作:
I) 添加 android:windowSoftInputMode="adjustPan"
到清单:
- 4 留在底部但是
- 其他所有东西都被推上去,所以 2、3 和标签被半遮住
II) 将 android:windowSoftInputMode="adjustResize"
添加到清单:没有任何变化,除非我也将 android:fitsSystemWindows="true"
添加到选项卡片段的 xml:
- 现在RelativeLayout 1周围的所有padding都被忽略了
- D 旁边的 EditText 被推到 2 但不可读,D 和 "OK" 按钮被键盘覆盖
- 4还是被推高了
所以这就是我想出的:无论我多么努力地尝试 devices/emulators 上的键盘总是在 layout 3
的底部我检查了高度从 开始的设备4.7 inches min
。如果你把 adjust:resize
放在清单文件中,它总是会在 top of keyboard 上显示最后的布局。但是如果你放置 adjust:nothing
那么你的 底部布局将不会显示 即使你想在上面写点东西。如果你把 adjust:adjutPan
然后它会像你说的那样将你的 布局推到顶部 。现在来到keyboard part
:
如果您想测量高度或检查您的键盘是否覆盖了您的布局,那么您需要测量屏幕和键盘的高度并找出差异。看看这个问题。
How to check visibility of software keyboard in Android?
根据该结果,您可以显示或隐藏布局。
注意:如果您希望按原样满足要求,则必须设计自定义布局。
我找到方法了! :) 非常感谢 Umair 为我提供了 ScrollView 的提示并测试了不同的东西!
首先,现在整体布局是这样搭建的:
- Surrounding RelativeLayout 1(没什么特别的,没有
android:fitsSystemWindows="true"
- ScrollView 似乎无论如何都禁用它!)
- 新的滚动视图
- new RelativeLayout(ScrollView只能包含一个元素!)
- 相对布局 2
- 线性布局 A(TextView + EditText)
- 线性布局 B(TextView + EditText)
- LinearLayout C (TextView + EditText)
- "Save" 按钮
- 相对布局 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"
是这里的重要部分,因为如果没有它,Relative Layout 4 将位于 ScrollView 的正下方,但是这个额外的小部分使它用尽了它可以使用的所有 space,同时仍然保持它尽可能向南。此外,您仍然可以使用边距在 ScrollView 和 RL 4 之间创建一些空白 space(即使您只会在 Android Studio 的预览 window 中看到它)。
这是做什么的:
- ScrollView 可用
- 键盘始终在 ScrollView 下方
- 如果 space 不足以显示 ScrollView 和键盘,则前者变为可滚动
- RelativeLayout 4 总是隐藏在键盘后面
- 标签保留在原处
- RelativeLayout 1 的填充不会被忽略(就像
android:fitsSystemWindows="true"
一样)
我有这样的布局:
没有颜色:https://i.stack.imgur.com/OdSda.png
- 选项卡的布局(单独的 xml 文件)
- RelativeLayout 1 环绕其他一切
- A、B、C在RelativeLayout 2中都有自己的LinearLayout
- 水平线、D(在 LinearLayout 中)和 "OK" 按钮有自己的 RelativeLayout 3
- 还有 E 的 RelativeLayout 4(=页脚)
如果我单击 D 旁边的 EditText 并打开键盘,我希望发生什么:
- 4留在底部,隐藏在键盘后面
- 如果space不足以完全显示 3,则 2 会折叠,直到再次关闭键盘
实际上发生了什么:
- 2 保持原样
- 键盘盖了一半,看不清我在输入什么
- 4被推高覆盖D
有两件事我已经尝试过,但都没有按预期完全工作:
I) 添加 android:windowSoftInputMode="adjustPan"
到清单:
- 4 留在底部但是
- 其他所有东西都被推上去,所以 2、3 和标签被半遮住
II) 将 android:windowSoftInputMode="adjustResize"
添加到清单:没有任何变化,除非我也将 android:fitsSystemWindows="true"
添加到选项卡片段的 xml:
- 现在RelativeLayout 1周围的所有padding都被忽略了
- D 旁边的 EditText 被推到 2 但不可读,D 和 "OK" 按钮被键盘覆盖
- 4还是被推高了
所以这就是我想出的:无论我多么努力地尝试 devices/emulators 上的键盘总是在 layout 3
的底部我检查了高度从 开始的设备4.7 inches min
。如果你把 adjust:resize
放在清单文件中,它总是会在 top of keyboard 上显示最后的布局。但是如果你放置 adjust:nothing
那么你的 底部布局将不会显示 即使你想在上面写点东西。如果你把 adjust:adjutPan
然后它会像你说的那样将你的 布局推到顶部 。现在来到keyboard part
:
如果您想测量高度或检查您的键盘是否覆盖了您的布局,那么您需要测量屏幕和键盘的高度并找出差异。看看这个问题。
How to check visibility of software keyboard in Android?
根据该结果,您可以显示或隐藏布局。
注意:如果您希望按原样满足要求,则必须设计自定义布局。
我找到方法了! :) 非常感谢 Umair 为我提供了 ScrollView 的提示并测试了不同的东西!
首先,现在整体布局是这样搭建的:
- Surrounding RelativeLayout 1(没什么特别的,没有
android:fitsSystemWindows="true"
- ScrollView 似乎无论如何都禁用它!)- 新的滚动视图
- new RelativeLayout(ScrollView只能包含一个元素!)
- 相对布局 2
- 线性布局 A(TextView + EditText)
- 线性布局 B(TextView + EditText)
- LinearLayout C (TextView + EditText)
- "Save" 按钮
- 相对布局 3
- LinearLayout D (TextView + EditText + "OK" 按钮)
- 相对布局 2
- new RelativeLayout(ScrollView只能包含一个元素!)
- 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"
是这里的重要部分,因为如果没有它,Relative Layout 4 将位于 ScrollView 的正下方,但是这个额外的小部分使它用尽了它可以使用的所有 space,同时仍然保持它尽可能向南。此外,您仍然可以使用边距在 ScrollView 和 RL 4 之间创建一些空白 space(即使您只会在 Android Studio 的预览 window 中看到它)。
这是做什么的:
- ScrollView 可用
- 键盘始终在 ScrollView 下方
- 如果 space 不足以显示 ScrollView 和键盘,则前者变为可滚动
- RelativeLayout 4 总是隐藏在键盘后面
- 标签保留在原处
- RelativeLayout 1 的填充不会被忽略(就像
android:fitsSystemWindows="true"
一样)