我有一个名为Messages
的屏幕,它向用户显示最近的消息列表。在我的activity_messages.xml
文件中,我有以下代码:
<View
android:id="@+id/horizontal_line"
android:layout_width="351dp"
android:layout_height="1dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:background="@android:color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.47"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/Game_Button"
app:layout_constraintVertical_bias="0.216" />
基本上,此代码块创建一条水平线。在该水平下方,我要显示用户的最近消息。
在该水平线下面的代码中,我有以下代码:
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="64dp"
tools:layout_editor_absoluteY="168dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical">
</android.support.v7.widget.RecyclerView>
</android.support.v4.widget.NestedScrollView>
这将显示用户的最近消息。
现在在我的Messages.java
文件中,我有以下代码:
mMessagesLayoutManager = new LinearLayoutManager(Messages.this);
mRecyclerView.setLayoutManager(mMessagesLayoutManager);
mMessagesAdapter = new MessagesAdapter(getDataSetMessages(), Messages.this);
mRecyclerView.setAdapter(mMessagesAdapter);
for(int i = 0; i < 100; i++) {
MessagesObject obj = new MessagesObject(Integer.toString(i));
resultsMessages.add(obj);
}
mMessagesAdapter.notifyDataSetChanged();
此代码用于测试目的,但是可以工作。它以线性顺序显示所有用户的消息,我可以滚动查看它们。我唯一的问题是,当我运行该程序时,最近的消息不会在水平线以下开始。一些消息在水平线上方,在其他元素上方。我认为第一条消息跳到位置(0,0)。
该如何解决?我希望我的消息以现在的样子显示,位于水平线的下方。
答案 0 :(得分:3)
更改此:
<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="64dp" tools:layout_editor_absoluteY="168dp">
对此:
<android.support.v4.widget.NestedScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/horizontal_line"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
这里正在进行两个主要更改:
ConstraintLayout
不完全支持match_parent
,因此我们改用0dp
(表示“匹配约束”)。答案 1 :(得分:1)
这只是约束问题。 您尚未为recyclerview设置约束,尝试添加约束并再次运行 它会工作
答案 2 :(得分:1)
您可以使用android:orientation =“ vertical”在LinearLayout中包装第一个视图和滚动视图,也可以添加约束(如果根视图是ConstraintLayout)