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" />
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,有小伙伴知道解决办法吗
CodeIdeal commented
item_page的根布局改成RelativeLayout试试
etwge commented
改成RelativeLayout 可以了,谢谢@CodeIdeal ,但是原因是什么的
wudongjiang333 commented
改成RelativeLayout算什么方法,这也算解决?