Android ScrollView 占据整个设备空间(垂直)

问题描述 投票:0回答:3

我的片段(

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

  1. ScrollView
    (宽:
    match_parent
    ,小时:
    fill_parent
  2. LinearLayout
    (宽:
    match_parent
    ,小时:
    wrap_content

我不明白,为什么

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 which 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"
我认为这不是一个干净的解决方案,但它对我有用。

android android-layout scrollview android-linearlayout
3个回答
0
投票

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

 <SrollView
   some height
   some width/>

  <TextView
      layoutBelow = scrollView
       layoutAbove = LinearLayout
  />

 <LinearLayout
    layout with buttons
  />

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>


0
投票

您可以通过将根

FrameLayout
替换为任一

来实现所需的布局
  1. LinearLayout
    layout_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. RelativeLayout
    layout_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>
    

    此选项与您的解决方案类似,但应定义尺寸。这并不像您想象的那么肮脏的解决方案,它只是在向布局添加更多元素或编辑底部栏布局方面不太灵活。但性能要好得多,因为布局只执行一次。

© www.soinside.com 2019 - 2024. All rights reserved.