如何避免元素重叠显示RelativeLayout上的软键盘

时间:2013-07-28 18:18:27

标签: android android-layout android-softkeyboard android-xml android-scrollview

我在这里看了很多帖子,似乎无法找到如何做到这一点。

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

在中间我希望LinearLayout内部有一些按钮,位于LinearLayout的顶部和开头之间,我想要textView

LinearLayout 位于 RelativeLayout

内的 ScrollView

我通过将LinearLayoutTextView置于RelativeLayout内来实现这一目标。 LinearLayout位于父级的中心,textView位于linearLayout之上,位于父级的顶部。文本垂直居中。

问题是当keyboard开启时。我只将LinearLayout放在ScrollView内。 如果我在adjustPan中使用manifest,则没有任何反应,我无法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_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> 。 这是代码:

{{1}}

这是adjustResize当前的样子:

没有键盘:

enter image description here

使用键盘:

enter image description here

有人能指出我正确的方向吗?

THX !!! :)

3 个答案:

答案 0 :(得分:0)

只需添加此

  

android:windowSoftInputMode="adjustPan|stateHidden"

到你的清单中的活动声明。

答案 1 :(得分: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"

答案 2 :(得分:0)

为了防止键盘显示时我的RelativeLayout中的视图垂直重叠 - 只需添加一个边距即可解决问题

android:layout_marginTop="25dp"