【发布时间】:2017-10-02 18:39:02
【问题描述】:
我有一个RelativeLayout 和一个ConstraintLayout(以及其他一些东西),我正在以编程方式填充儿童。初始化所有子视图后,我很难调整父 RelativeLayout 的大小。
基本上我想要实现的是:
这里是代码sn-ps:
@BindView(R.id.session_summary_items_include_correct) View mCardCorrect;
//...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_session_summary_items, container, false);
ButterKnife.bind(this, view);
correctCard = new IncludedCard();
ButterKnife.bind(correctCard, mCardCorrect);
initializeViews();
mCardCorrect.post(() -> resizeView(mCardCorrect));
return view;
}
private void initializeViews(){
ArrayList<MyClass> items = MyClass.GetItems();
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (items.size() > 0){
correctCard.mCardTitle.setText("Correct Card");
ArrayList<View> views = getItemViews(items, layoutInflater);
populateLayoutWithItemViews(correctCard.mConstraintLayout, views);
}
}
private ArrayList<View> getItemViews(ArrayList<MyClass> items, LayoutInflater inflater){
ArrayList<View> results = new ArrayList<>();
for (MyClass item : items){
View view = inflater.inflate(R.layout.item_view, null);
TextView mTextTitle = (TextView) view.findViewById(R.id.item_view_title);
mTextTitle .setText(item.getTitle());
results.add(view);
}
return results;
}
private void populateLayoutWithItemViews(ConstraintLayout layout, ArrayList<View> items){
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(layout);
for (int idx = 0; idx < items.size(); idx ++){
View item = items.get(idx);
item.setId(View.generateViewId());
layout.addView(item);
// constraintSet magic to make them connect as expected
}
constraintSet.applyTo(layout);
}
private void resizeView(View view){
view.setLayoutParams(new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
}
static class IncludedCard{
@BindView(R.id.card_title) TextView mCardTitle;
@BindView(R.id.card_layout) ConstraintLayout mConstraintLayout;
}
现在,问题是,无论何时何地,我将测量/调整 mCardCorrect 视图的大小,结果是相同的:它将被测量到卡片标题,就好像 ConstraintLayout 中的子项不存在一样.像这样:
我尝试过发布测量结果/调整大小到 Runnable,如下所示:FrameLayout child view not updating correctly on resize ,并使用 OnGlobalLayoutListener,如下所示:Android: set view height via ViewTreeObserver 。我仍然是一个 Android 新手,这是我的第一个项目,所以任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: java android view android-relativelayout android-constraintlayout