RecyclerView 的列表项中的布局对齐方式不正确

Incorrect layout alignment in list Item of RecyclerView

我在设置 RecyclerView 中的布局时遇到问题。

这里是布局xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="1">

    <TextView
        android:id="@+id/dummy_text_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0.5"
        android:background="#ffffff" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.3"
        android:text="Button"
        android:textAllCaps="false" />

</LinearLayout>

这是我的 MainActivity

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

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setLayoutManager(layoutManager);

        List<String> list = new ArrayList<>();
        for (int i = 0; i <= 25; i++) {
            list.add("item " + i);
        }

        DummyRVAdapter adapter = new DummyRVAdapter(MainActivity.this, list);
        recyclerView.setAdapter(adapter);

    }

适配器代码:

public class DummyRVAdapter extends RecyclerView.Adapter<DummyRVAdapter.Holder> {

    private Context mContext;
    private List<String> mList;

    public DummyRVAdapter(Context context, List<String> list) {
        this.mContext = context;
        this.mList = list;
    }

    @Override
    public DummyRVAdapter.Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(mContext, R.layout.item_dummy_layout, null);
        //View view =LayoutInflater.from(mContext).inflate(R.layout.item_dummy_layout, null);
        return new Holder(view);
    }

    @Override
    public void onBindViewHolder(DummyRVAdapter.Holder holder, int position) {
        holder.textView.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    public class Holder extends RecyclerView.ViewHolder {
        TextView textView;

        public Holder(View itemView) {
            super(itemView);

            textView = (TextView) itemView.findViewById(R.id.dummy_text_view);
        }
    }
}

我的输出截图。

在我的布局 XML 文件中,我将 textView 的大小声明为 50%,将 Button 的大小声明为 30% ,但是,我的 recyclerView 仍然没有以正确的方式显示它没有以正确的方式显示。

此布局在列表视图中工作正常。

我不知道我的代码哪里出了问题。我以正确的方式将 布局管理器和适配器 设置到我的 RecyclerView。

编辑: 请查看 ScreenShot,它显示 TextView 未分配 50% 的屏幕,这就是问题所在。

我为 Recyclerview 创建了复杂的布局,它的对齐方式不是上述格式。

但在列表视图中有效

谁能帮我解决这个问题?

提前致谢。

As android:weightSum="1" 但所有 android:layout_weight 的总和不等于 1,因此显示不正确

您已将 textView 的大小声明为 50%,将 Button 的大小声明为 30%,但其余剩余为 20%,因此未以正确的方式显示。所以可以将 textview 增加到 70%,将 Button 增加到 30%,这样 android:weightSumandroid:layout_weight 总和将相等。

将布局更改为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="1" >

    <TextView
        android:id="@+id/dummy_text_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.7"
        android:background="#ffffff" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.3"
        android:text="Button"
        android:textAllCaps="false" />
</LinearLayout >

它不仅仅是重量有问题,它的视图文本视图可能占用了它的大小,但它的文本比按钮大小更小
一件重要的事情即使在重量之后或没有重量之后,也可以使用按钮中的最小尺寸和最大尺寸来根据需要适合它,就像在您的布局中一样:

     <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
    android:orientation="horizontal"
     android:weightSum="1">

<TextView
    android:id="@+id/dummy_text_view"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="0.5"
    android:background="#ffffff" />

<Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.3"
    android:text="Button"
     android:max_height="30dp"
    android:textAllCaps="false" />

而不是

View view = View.inflate(mContext, R.layout.item_dummy_layout, null);

使用:

View view = LayoutInflater.from(mContext).(R.layout.item_dummy_layout, parent, false);