视图固定在底部的Android版面

时间:2015-10-16 09:18:49

标签: android android-layout

我正在尝试在Andorid中创建一个布局。我需要一个固定在屏幕底部的TextView(下图中的2)。内容(图中的1)包括scrollview和editTexts。

我遇到的问题是当软键盘出现时(图中为3),标有2的红色框也出现在键盘上方。我希望红色框保持在屏幕外,整个内容在软键盘上方的空间中滚动。

我尝试将红色框(2)放在LinearLayout中,但它从不将自己固定在底部,屏幕底部总是有一个小间隙。我也尝试在清单中更改android:windowSoftInputMode,但这不是理想的效果。

这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:isScrollContainer="false">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <EditText />
            <EditText />

        </LinearLayout>
    </ScrollView>

    <TextView
         android:id="@+id/3"
         android:layout_alignParentBottom="true"
         text="3" />
</RelativeLayout>

Illustration of android layout problem

非常感谢任何建议。

3 个答案:

答案 0 :(得分:0)

您需要做的就是将活动的windowSoftInputMode标志切换为“adjustPan”。查看CommitInfo entity了解详情。

{{1}}

答案 1 :(得分:0)

尝试使用以下布局,看看这是否是您要找的..

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:isScrollContainer="false">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <EditText
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:id="@+id/ed1"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="50dp"
            android:layout_marginBottom="50dp"/>
        <EditText
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:id="@+id/ed2"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="50dp"
            android:layout_marginBottom="50dp"/>

    </LinearLayout>
</ScrollView>

<TextView
    android:id="@+id/btext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:text="this is 3rd view"
    android:layout_marginBottom="20dp"
    android:layout_centerHorizontal="true"/>
</RelativeLayout>

TL; DR版本,我刚刚在你的滚动视图代码中删除了两行:

android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"

  android:layout_centerInParent="true"

看看是否有帮助!

你有任何理由同时使用 android:layout_alignParentTop =“true”     在scrollview上 android:layout_alignParentBottom =“true”

答案 2 :(得分:0)

这里有一个有用的想法。

  1. 调整布局,使红色框(2)里面 LinearLayout
  2. 在红色框和最后一个EditText之间创建一个小视图
  3. 为红色框和LinearLayout指定一个id,以便我们可以从java类中管理它们。
  4. 您的xml应如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ScrollView
            android:layout_alignParentTop="true"
            android:layout_alignParentBottom="true"
            android:isScrollContainer="false">
    
            <LinearLayout
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <EditText />
                <EditText />
    
                <View
                    android:id="@+id/stretcher"
                    android:layout_width="match_parent"
                    android:layout_height="0dp" />
    
                <TextView
                    android:id="@+id/2"
                    android:layout_gravity="bottom"
                    text="2" />
            </LinearLayout>
        </ScrollView>
    </RelativeLayout>
    

    现在在你的java onActivityCreated中添加以下代码:

        final View mainLayout = getView();
        final View mainContent = getView().findViewById(R.id.content);
        final View stretcherView = getView().findViewById(R.id.stretcher);
    
        //Main layout uses weight some, so we can't hard code the size of the circles.
        //We must dynamically re-size
        mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if (android.os.Build.VERSION.SDK_INT >= 16) {
                    mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                } else {
                    mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                }
    
                //Calculate the desired height of the stretcher view to be the remainder between full screen and content.
                int stretchHeight = mainLayout.getHeight() - mainContent.getHeight();
    
                //Apply calculated height remainder to stretched view.
                //This enables our bottom box to be pushed to the bottom without obstructing the content when the keyboard appears.
                LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) stretcherView.getLayoutParams();
                params.height = stretchHeight;
                stretcherView.setLayoutParams(params);
            }
        });
    

    视图侦听器测量完整视图的高度,然后减去内容的高度。这使我们看到内容和屏幕底部之间的差距。使用担架视图,我们现在可以将红色框向下推到页面底部,就像它是alignParentBottom一样。 当键盘出现时,红色框位于滚动内。