如何避免元素重叠在RelativeLayout上显示软键盘
Posted
技术标签:
【中文标题】如何避免元素重叠在RelativeLayout上显示软键盘【英文标题】:How to avoid elements overlapping showing softkeyboard on RelativeLayout 【发布时间】:2013-07-28 11:49:05 【问题描述】:我在这里阅读了很多帖子,但似乎无法找到如何做到这一点。
我正在尝试创建以下布局 xml。
在中间我想要一个LinearLayout
,里面有一些按钮,在LinearLayout
的顶部和开头之间我想要一个textView
。
LinearLayout 位于 ScrollView 中,而 ScrollView 位于 RelativeLayout
中我通过将LinearLayout
和TextView
放在RelativeLayout
中来实现这一点。 LinearLayout
位于父项的中心,textView
位于 linearLayout
上方并位于父项的顶部。文本垂直居中。
问题在于keyboard
何时开启。我只将LinearLayout
放在ScrollView
中。
如果我在manifest
中使用adjustPan
,那么什么也不会发生,我不能scroll
。如果我使用adjustResize
,那么Textview
会出现在LinearLayout
的顶部而不是上面。那我该怎么办?还是不可能?
如果需要,我只希望linearLayout
成为scrollable
。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/black_overlay"
android:animateLayoutChanges="true"
android:hapticFeedbackEnabled="true"
android:layout_
android:layout_>
<ScrollView
android:layout_
android:layout_
android:fillViewport="true"
android:layout_centerInParent="true"
android:id="@+id/scrollView">
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:id="@+id/mLayout">
<Button
android:layout_marginBottom="10dp"
android:layout_
android:layout_
android:text="New Match"
android:id="@+id/btn_newMatch"
style="@style/ButtonBar"
android:typeface="monospace"/>
<Button
android:layout_marginBottom="10dp"
android:layout_
android:layout_
android:text="Manage Matches"
android:id="@+id/btn_manageMatches"
style="@style/ButtonBar"
android:typeface="monospace"/>
<Button
android:layout_marginBottom="10dp"
android:layout_
android:layout_
android:text="Manage Teams"
android:id="@+id/btn_manageTeams"
style="@style/ButtonBar"
android:typeface="monospace"/>
<Button
android:layout_marginBottom="10dp"
android:layout_
android:layout_
android:text="Settings"
android:id="@+id/btn_settings"
style="@style/ButtonBar"
android:typeface="monospace"/>
<Button
android:layout_
android:layout_
android:text="Logout"
android:id="@+id/btn_logout"
style="@style/ButtonBar"
android:typeface="monospace"/>
</LinearLayout>
</ScrollView>
<TextView
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:text="Name"
android:typeface="monospace"
android:layout_above="@id/scrollView"
android:layout_alignParentTop="true"
android:gravity="center"
android:textSize="50dp"
android:textAppearance="?android:textAppearanceMediumInverse"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"/>
</RelativeLayout>
这是当前使用 adjustResize 的样子:
没有键盘:
带键盘:
谁能指出我正确的方向?
谢谢!!! :)
【问题讨论】:
【参考方案1】:添加这个
android:windowSoftInputMode="adjustPan|stateHidden"
在清单中的活动声明处。
【讨论】:
使用 adjustPan 屏幕不会调整大小。键盘保持在布局的顶部,因此布局不会重叠,但也不会滚动。 能否请您详细说明您的问题..!你到底想要什么? 我真正想要的是布局调整到最小高度,没有任何东西重叠并变得可滚动。但是在阅读了很多之后,我认为这是不可能的。所以我希望它可以滚动以避免我在图像上显示的重叠。【参考方案2】:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:animateLayoutChanges="true"
android:background="@android:color/darker_gray"
android:hapticFeedbackEnabled="true" >
<EditText
android:id="@+id/etName"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center" />
<ScrollView
android:id="@+id/scrollView"
android:layout_
android:layout_
android:layout_below="@+id/etName"
android:layout_centerInParent="true"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/mLayout"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:orientation="vertical" >
<Button
android:id="@+id/btn_newMatch"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
android:text="New Match"
android:typeface="monospace" />
<Button
android:id="@+id/btn_manageMatches"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
android:text="Manage Matches"
android:typeface="monospace" />
<Button
android:id="@+id/btn_manageTeams"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
android:text="Manage Teams"
android:typeface="monospace" />
<Button
android:id="@+id/btn_settings"
android:layout_
android:layout_
android:layout_marginBottom="10dp"
android:text="Settings"
android:typeface="monospace" />
<Button
android:id="@+id/btn_logout"
android:layout_
android:layout_
android:text="Logout"
android:typeface="monospace" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
在活动标签中的清单中
android:windowSoftInputMode="adjustResize|stateHidden"
【讨论】:
【参考方案3】:为了防止在我的RelativeLayout
中显示键盘时视图垂直重叠 - 只需添加边距即可解决问题
android:layout_marginTop="25dp"
【讨论】:
以上是关于如何避免元素重叠在RelativeLayout上显示软键盘的主要内容,如果未能解决你的问题,请参考以下文章
TextView在RelativeLayout中重叠ImageView
在relativelayout中布局,两个控件重叠,放在后面得viewpager点击滑动事件都无效了