這可能是一個禁忌,但我試圖動態地將視圖添加到RecyclerView中。用例是以列表格式顯示不同數量的填字格。假設單元格的默認大小是一些任意數字:100.但是,如果單元格數量的長度大於容器的寬度,則單元格需要縮小以便它們適合。 。爲什麼RecyclerView ViewBinder返回不一致的寬度
我在想,解決方案然後是將容器的寬度除以單元格的數量,並將其設置爲視圖的寬度,然後將充氣視圖添加到容器中。
public class MyViewHolder extends RecyclerView.ViewHolder {
public static final int MAX_WIDTH = 200;
LayoutInflater layoutInflater;
LinearLayout cellHolder;
TextView someText;
public MyViewHolder(View view) {
super(view);
layoutInflater = LayoutInflater.from(view.getContext());
someText = (TextView) view.findViewById(R.id.sometext);
cellHolder = (LinearLayout) view.findViewById(R.id.cell_container);
}
public void bind(Integer integer) {
someText.setText(integer.toString());
cellHolder.removeAllViews();
int totalWidth = cellHolder.getWidth();
Log.e("WHY", String.format("bind: Why does this width calculation not consistently work? %d", totalWidth));
int minWidth = totalWidth/integer;
if (minWidth == 0 || minWidth > MAX_WIDTH) {
minWidth = MAX_WIDTH;
}
for(int i = 0; i < integer; i++) {
View inflate = layoutInflater.inflate(R.layout.box, null);
inflate.setMinimumHeight(minWidth);
inflate.setMinimumWidth(minWidth);
TextView textView = (TextView) inflate.findViewById(R.id.square_number);
textView.setText(String.valueOf(integer));
cellHolder.addView(inflate);
}
}
}
我已經創建了一個示例應用程序以準確顯示發生了什麼。 Here是在github上的示例應用程序中演示問題的整個代碼。我已經嘗試添加measure calls,並添加一個tree observer
作品像一個冠軍,謝謝! – farkerhaiku