Android ScrollView获取整个设备空间(垂直)

时间:2017-02-02 19:01:39

标签: android android-layout scrollview android-linearlayout

我的片段(FrameLayout)(w:match_parent,h:fill_parent)有两个包含布局:

  1. ScrollView(w:match_parent,h:fill_parent
  2. LinearLayout(w:match_parent,h:wrap_content
  3. 我知道,为什么LinearLayout只是覆盖了ScrollView。我想让角落的ScrollView停在LinearLayout

    <FrameLayout 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"
    tools:context="com.my.stackoverflow.example.problemFragment">
        <!-- This is my Scrollview with an dynamic nums of TxtViews (Added by onViewCreated in my Fragment) -->
        <ScrollView
            android:id="@+id/ScrollViewId"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="top">
            <LinearLayout
                android:id="@+id/MessagesId"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
            </LinearLayout>
        </ScrollView>
        <!-- Following a LinearLayout wich containing an EditBox and a Button)
        Take a look at the bg color, maybe helpful for you?-->
        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:background="@color/colorWhite"
            android:layout_gravity="bottom"
            android:gravity="bottom">
    
            <EditText
                android:id="@+id/MessageEditText"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:hint="Enter Message"
                android:inputType="textAutoComplete"
                android:textSize="20sp"
                android:background="@color/colorWhite"
                android:layout_marginLeft="5dp"
                android:paddingTop="12dp"
                android:paddingBottom="12dp"
                android:paddingLeft="12dp"
                android:layout_weight="1"/>
            <RelativeLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center">
                <ImageView
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:layout_marginRight="10dp"
                    android:foregroundGravity="center"
                    android:background="@drawable/circle"/>
                <ImageView
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginTop="5dp"
                    android:tint="@color/colorWhite"
                    android:background="@drawable/ic_send_black_24dp"/>
            </RelativeLayout>
        </LinearLayout>
    

    草图:enter image description here

    我的解决方案: 我已将android:layout_marginBottom="50dp"添加到我的ScrollView,并将我的LinearLayout高度从wrap_content设置为android:layout_height="50dp" 我认为这不是一个干净的解决方案,但它对我有用。

3 个答案:

答案 0 :(得分:0)

如果底部显示的文本是TextView,则可以使用: LayoutBelow并将其置于底部布局上方的ScrollView和Layout之下。

 <SrollView
   some height
   some width/>

  <TextView
      layoutBelow = scrollView
       layoutAbove = LinearLayout
  />

 <LinearLayout
    layout with buttons
  />

答案 1 :(得分:0)

这应该有效:

<RelativeLayout 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:id="@+id/container"
tools:context="com.wembleystudios.engagementkit.service.socialbetting.view.activities.SignUpActivity">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignTop="@+id/layout"
    >

</ScrollView>

<LinearLayout
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="25dp"
    android:id="@+id/layout"
    android:background="@color/black"
    android:orientation="horizontal"></LinearLayout>

答案 2 :(得分:0)

您可以使用

替换根FrameLayout来实现所需的布局
  1. LinearLayoutlayout_weight

    <LinearLayout
        android:orientation="vertical">
    
        <ScrollView
            android:id="@+id/ScrollViewId"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
        </ScrollView>
    
        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
        </LinearLayout>
    </LinearLayout>
    

    此选项非常简单,您可以轻松地在布局的顶部或底部添加更多元素。缺点是布局必须执行两次。

  2. RelativeLayoutlayout_above

    <RelativeLayout>
    
        <ScrollView
            android:id="@+id/ScrollViewId"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/bottom_bar">
        </ScrollView>
    
        <LinearLayout
            android:id="@+id/bottom_bar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
        </LinearLayout>
    </RelativeLayout>
    

    在为布局添加更多元素时,此选项最灵活。布局也必须执行两次。

  3. FrameLayout以及dimens.xml

    中定义的固定底栏高度
    <FrameLayout>
    
        <ScrollView
            android:id="@+id/ScrollViewId"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="@dimen/bottom_bar_height">
        </ScrollView>
    
        <LinearLayout
            android:layout_height="@dimen/bottom_bar_height"
            android:layout_width="match_parent">
        </LinearLayout>
    </FrameLayout>
    

    此选项与您的解决方案类似,但应定义维度。它并不像你想象的那么肮脏的解决方案,它只是在你的布局中添加更多元素而不是编辑底栏布局时也不是很灵活。但性能更好,因为布局只执行一次。