1. 程式人生 > >android中RecyclerView條目無法橫向鋪滿的問題

android中RecyclerView條目無法橫向鋪滿的問題

該問題網上比較多的答案,都是要求修改inflate條目佈局的方式,具體如下:

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.ble_result_item_unmatched, parent, false);

關鍵在於parent不能傳空.
假如使用

LayoutInflater.from(parent.getContext()).inflate(R.layout.ble_result_item_unmatched, null, false);

則很可能出現條目無法橫向鋪滿的情況,即便你在view的佈局中設定了layout_width為match_parent,原因在於如果parent(即父佈局)傳空,則方法內部實現的時候,會忽略你設定的layout引數,
parent不傳空,attachToRoot傳false:

if (root != null) {
    // 系統根據父佈局生成layoutParams
    params = root.generateLayoutParams(attrs);
    // 如果不新增到父佈局,則新增layoutParams
    if (!attachToRoot) {
        temp.setLayoutParams(params);
    }
}

parent不傳空,attachToRoot傳true:

 // 如果父佈局不空,且新增到父佈局
 if (root != null && attachToRoot) {
     root.addView(temp, params
); }

parent傳空,則只是inflate佈局,但並不會新增layout引數.

如果使用:

View view = View.inflate(parent.getContext(), R.layout.ble_result_item_unmatched, null);

該方法內部是用的也是該方法:

LayoutInflater.inflate(resource, root, root != null)