android - RecyclerView 在 ConstraintLayout 中表现异常

标签 android android-recyclerview android-constraintlayout

我在 RecyclerView 中遇到了视觉错误直到我注意到它是由我的 RecyclerView 引起的进入ConstraintLayout .

这就是我试图实现的(RecyclerViewGridLayoutManagerLinearLayout 中):

enter image description here

那是我的第一次尝试( RecyclerViewGridLayoutManagerConstraintLayout 中):

enter image description here

所以我的问题是:为什么不是 RecyclerView RecyclerView 时项目正确对齐住在 ConstraintLayout 内?

使用 Layout Inspector 查看会发现 RecyclerView确实覆盖了整个屏幕宽度。

此外,在分配 wrap_content 时,项目按预期布局。或 match_parent到项目的 android:layout_widthandroid:layout_height .

例如,当两者都设置为 wrap_content 时这是 ConstraintLayout 中的结果:

enter image description here

这是损坏布局的来源(第二个屏幕截图)。

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 父级。此外,将约束 horizo​​ntalWeight 添加为 1。

让我知道它有效。

关于android - RecyclerView 在 ConstraintLayout 中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282188/

相关文章:

当模型中的数据发生变化时,Android Databinding 不会更新 UI

android - 具有背景颜色和文本的回收器 View 滑动不在滑动时显示矩形

android - ConstraintLayout RecyclerView 显示在 BottomNavigationView 下

android - 在 View 检查器中更新边距值对布局没有影响

android - 是否可以使用动画绘图?

android - 创建一个简单的android项目时出错

android - 访问网络可用性状态android

android - ARCore 使用前置摄像头集成 AR 应用的深度传感器?

java - ViewPager 内的 RecyclerView 位于另一个 RecyclerView 内不滚动

java - 使用约束布局针对不同的屏幕尺寸进行设计