页脚布局显示在键盘上方

时间:2019-04-17 12:48:43

标签: android android-webview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".feature.webview.WebViewActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <WebView
            android:id="@+id/web_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/header_height"
            android:background="@color/colorPrimary"
            android:clickable="true"
            android:paddingLeft="@dimen/dp_14"
            android:paddingRight="@dimen/dp_14">

            <ImageView
                android:id="@+id/img_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerVertical="true"
                android:contentDescription="@string/defaultContentDescription"
                android:padding="@dimen/dp_14"
                android:src="@drawable/icn_back"
                android:visibility="gone" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:contentDescription="@string/defaultContentDescription"
                android:src="@drawable/icn_hundred_for_good" />

            <ImageView
                android:id="@+id/img_profile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:contentDescription="@string/defaultContentDescription"
                android:padding="@dimen/dp_5"
                android:src="@drawable/icn_profile"
                android:visibility="gone" />
        </RelativeLayout>
    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_14"
        android:background="@color/white">

    </View>

    <RelativeLayout
        android:id="@+id/rl_footer"
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_height"
        android:background="@color/colorPrimary"
        android:paddingLeft="@dimen/dp_60"
        android:paddingRight="@dimen/dp_60"
        android:visibility="gone">

        <LinearLayout
            android:id="@+id/layout_home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:gravity="center"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/img_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/defaultContentDescription"
                android:src="@drawable/icn_home" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/source_sans_pro_regular"
                android:lineSpacingMultiplier="1.20"
                android:paddingTop="@dimen/dp_3"
                android:text="@string/home"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_10" />
        </LinearLayout>


        <LinearLayout
            android:id="@+id/layout_record_act"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingEnd="@dimen/dp_3">

            <ImageView
                android:id="@+id/img_record_act"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/defaultContentDescription"
                android:src="@drawable/icn_setting" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/source_sans_pro_regular"
                android:lineSpacingMultiplier="1.20"
                android:paddingTop="@dimen/dp_3"
                android:text="@string/record_act"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_10" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/layout_dashboard"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:gravity="center"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/img_dashboard"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/defaultContentDescription"
                android:src="@drawable/icn_dashboard" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/source_sans_pro_regular"
                android:lineSpacingMultiplier="1.20"
                android:paddingTop="@dimen/dp_3"
                android:text="@string/dashboard"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_10" />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

我的布局的底部有一个webview和一个页脚布局。

在webview内的任何字段中输入文本时,页脚布局会显示在键盘顶部。我尝试在清单文件中设置 android:windowSoftInputMode =“ somevalue” 。我删除了 android:layout_weight 参数,并对高度进行了硬编码。在这两种情况下,它都可以正常工作,并且页脚不会出现在小键盘上,但是会引起另一个问题,即小键盘现在在Webview的编辑字段上重叠。在应用这些修补程序之前,当键盘可见时,这些字段会自动向上滚动。

如何确保页脚布局保留在底部并在键盘出现时编辑字段以向上滚动?

1 个答案:

答案 0 :(得分:1)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/rl_footer" />

    <RelativeLayout
        android:id="@+id/rl_footer"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:visibility="visible">


        <ImageView
            android:id="@+id/img_home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />


        <ImageView
            android:id="@+id/img_record_act"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

        <ImageView
            android:id="@+id/img_dashboard"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true" />
    </RelativeLayout>
</RelativeLayout>

这将是您必须在活动中编写的代码

relativeLayoutScreen.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    int heightDiff = relativeLayoutScreen.getRootView().getHeight() - relativeLayoutScreen.getHeight();

                    if (heightDiff > 100) {
                        Log.e("MyActivity", "keyboard opened");
                        relativeLayoutFooter.setVisibility(View.GONE);
                    } else {
                        Log.e("MyActivity", "keyboard closed");
                        relativeLayoutFooter.setVisibility(View.VISIBLE);

                    }
                }
            });

我认为这会起作用。 在这个relativeLayoutScreen是父主布局。 和relativeLayoutFooter是页脚布局名称

这是经过测试的代码,可以正常工作。