android-cn/android-discuss

ConstraintLayout 包含RecyclerView,Adapter的itemView设置match_parent不会拉伸屏幕的宽度问题

Closed this issue · 3 comments

etwge commented

activity_main.xm如下

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler"
    android:layout_width="0dp"
    android:layout_height="200dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Adapter的item_page.xml

<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:gravity="center"
    android:textColor="@color/colorPrimary"
    android:textSize="16sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private List<String> mData;

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
	View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_page, parent, false);
	return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
	holder.name.setText(mData.get(position));
	holder.name.setBackgroundColor(position % 2 == 0 ? Color.GREEN : Color.LTGRAY);
}

@Override
public int getItemCount() {
	return mData != null ? mData.size() : 0;
}

public void setData(List<String> data) {
	mData = data;
	notifyDataSetChanged();
}

public List<String> getData() {
	return mData;
}

static class ViewHolder extends RecyclerView.ViewHolder {

	TextView name;

	public ViewHolder(View itemView) {
		super(itemView);
		name = itemView.findViewById(R.id.textView);
	}
}

}
然后MainActiivty.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	initView();
}

private void initView() {
	final RecyclerView recyclerView = findViewById(R.id.recycler);
	recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
	final MyAdapter pageAdapter = new MyAdapter();
	recyclerView.setAdapter(pageAdapter);
	pageAdapter.setData(obtainTest());
}

private List<String> obtainTest() {
	List<String> list = new ArrayList<>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	return list;
}

}

效果如下

这个应该是个bug,有小伙伴知道解决办法吗

item_page的根布局改成RelativeLayout试试

etwge commented

改成RelativeLayout 可以了,谢谢@CodeIdeal ,但是原因是什么的

改成RelativeLayout算什么方法,这也算解决?