我的片段(
FrameLayout
)(w:match_parent
,h:fill_parent
)有两个包含布局:
ScrollView
(宽:match_parent
,小时:fill_parent
)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>
我的解决方案: 我已将
android:layout_marginBottom="50dp"
添加到我的 ScrollView 中,并将 LinearLayout 高度从 wrap_content
设置为 android:layout_height="50dp"
我认为这不是一个干净的解决方案,但它对我有用。
如果底部显示的文本是 TextView,则可以使用: LayoutBelow 并将其放置在底部布局的 ScrollView 和 Layout 上方。
<SrollView
some height
some width/>
<TextView
layoutBelow = scrollView
layoutAbove = LinearLayout
/>
<LinearLayout
layout with buttons
/>
这应该有效:
<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>
您可以通过将根
FrameLayout
替换为任一来实现所需的布局
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>
此选项非常简单,您可以轻松地将更多元素添加到布局的顶部或底部。缺点是要进行两次布局。
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>
在向布局添加更多元素时,此选项是最灵活的。不过布局也必须执行两次。
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>
此选项与您的解决方案类似,但应定义尺寸。这并不像您想象的那么肮脏的解决方案,它只是在向布局添加更多元素或编辑底部栏布局方面不太灵活。但性能要好得多,因为布局只执行一次。