我在 RecyclerView
中遇到了视觉错误直到我注意到它是由我的 RecyclerView
引起的进入ConstraintLayout
.
这就是我试图实现的(RecyclerView
和 GridLayoutManager
在 LinearLayout
中):
那是我的第一次尝试( RecyclerView
和 GridLayoutManager
在 ConstraintLayout
中):
所以我的问题是:为什么不是 RecyclerView
RecyclerView
时项目正确对齐住在 ConstraintLayout
内?
使用 Layout Inspector 查看会发现 RecyclerView
确实覆盖了整个屏幕宽度。
此外,在分配 wrap_content
时,项目按预期布局。或 match_parent
到项目的 android:layout_width
和 android:layout_height
.
例如,当两者都设置为 wrap_content
时这是 ConstraintLayout
中的结果:
这是损坏布局的来源(第二个屏幕截图)。
MainActivity.java
package com.example.recyclerviewtest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setAdapter(new MyRecyclerViewAdapter());
}
}
MyRecyclerViewAdapter.java
package com.example.recyclerviewtest;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyRecyclerViewAdapter extends RecyclerView.Adapter {
class ViewHolder extends RecyclerView.ViewHolder {
ViewHolder(View itemView) {
super(itemView);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.recycler_view_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 3;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="GridLayoutManager"
app:spanCount="2" />
</android.support.constraint.ConstraintLayout>
recycler_view_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_light"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="LINE 1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="LINE 2" />
</LinearLayout>
总结一下:布局只有在将固定值设置为 android:layout_width
时才会中断。或 android:layout_height
在使用 ConstraintLayout
时.
最佳答案
尝试将回收器 View 宽度设置为 0dp,同时添加一个约束 startToStarOf 父级和一个约束 endToEndOf 父级。此外,将约束 horizontalWeight 添加为 1。
让我知道它有效。
关于android - RecyclerView 在 ConstraintLayout 中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282188/