如何避免相对布局中软键盘弹出时元素重叠

3

我在这里阅读了很多帖子,但似乎找不到如何实现它。

我正在尝试创建以下布局xml。

我想要一个包含一些按钮的 LinearLayout 位于中间,在 LinearLayout 的顶部和开头之间我想要一个 textView

LinearLayoutScrollView 中,而 ScrollView 又在 RelativeLayout 中。

我通过将 LinearLayoutTextView 放置在 RelativeLayout 中来实现此目标。 LinearLayout 位于父级的中心位置,而 textView 位于 linearLayout 上方和父级的顶部。文本垂直居中。

问题在于当 keyboard 打开时。 我只将 LinearLayout 放在 ScrollView 中。如果我在 manifest 中使用 adjustPan,则什么也不会发生,我无法滚动。 如果我使用 adjustResize,那么 Textview 将出现在 LinearLayout 的上方而不是上面。 那么我该怎么办呢? 还是不可能?我只想让 linearLayout 如果需要的话可滚动。以下是代码:

<?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_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:fillViewport="true"
        android:layout_centerInParent="true"
        android:id="@+id/scrollView">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center_horizontal"
            android:id="@+id/mLayout">

            <Button
                android:layout_marginBottom="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="New Match"
                android:id="@+id/btn_newMatch"
                style="@style/ButtonBar"
                android:typeface="monospace"/>

            <Button
                android:layout_marginBottom="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Manage Matches"
                android:id="@+id/btn_manageMatches"
                style="@style/ButtonBar"
                android:typeface="monospace"/>

            <Button
                android:layout_marginBottom="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Manage Teams"
                android:id="@+id/btn_manageTeams"
                style="@style/ButtonBar"
                android:typeface="monospace"/>

            <Button
                android:layout_marginBottom="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Settings"
                android:id="@+id/btn_settings"
                style="@style/ButtonBar"
                android:typeface="monospace"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Logout"
                android:id="@+id/btn_logout"
                style="@style/ButtonBar"
                android:typeface="monospace"/>
        </LinearLayout>
    </ScrollView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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后的当前效果:
没有键盘时: enter image description here 有键盘时: enter image description here 能否有人指点一下方向?
谢谢!!! :)
3个回答

0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    android:background="@android:color/darker_gray"
    android:hapticFeedbackEnabled="true" >

    <EditText
        android:id="@+id/etName"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        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_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/etName"
        android:layout_centerInParent="true"
        android:fillViewport="true" >

        <LinearLayout
            android:id="@+id/mLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:orientation="vertical" >

            <Button
                android:id="@+id/btn_newMatch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:text="New Match"
                android:typeface="monospace" />

            <Button
                android:id="@+id/btn_manageMatches"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:text="Manage Matches"
                android:typeface="monospace" />

            <Button
                android:id="@+id/btn_manageTeams"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:text="Manage Teams"
                android:typeface="monospace" />

            <Button
                android:id="@+id/btn_settings"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:text="Settings"
                android:typeface="monospace" />

            <Button
                android:id="@+id/btn_logout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Logout"
                android:typeface="monospace" />
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

在你的清单文件中的活动标签处。
 android:windowSoftInputMode="adjustResize|stateHidden"

0
为了防止键盘弹出时视图在我的RelativeLayout中发生垂直重叠 - 只需添加一个边距即可解决问题。 android:layout_marginTop="25dp"

0

只需添加以下内容:

android:windowSoftInputMode="adjustPan|stateHidden"

在您的清单文件中的活动声明处即可。


使用adjustPan时,屏幕不会重新调整大小。键盘停留在布局的顶部,因此布局不会重叠,但也不会滚动。 - juancamilo87
请您详细说明您的问题!您需要什么? - Sanket Shah
我真正想要的是布局能够自动调整到最小高度,避免重叠并且可以滚动。但是经过了很多阅读,我认为这是不可能的。因此,我希望它可以滚动,以避免图像中所示的重叠问题。 - juancamilo87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接