J'ai un RelativeLayout
avec un ConstraintLayout
(et quelques autres choses) que je suis en train de remplir par programmation avec les enfants. J'ai du mal à redimensionner le parent RelativeLayout
après avoir initialisé toutes les vues enfant.Mise à jour des dimensions de la vue après l'ajout des enfants
En fait ce que je suis en train de réaliser est la suivante:
Voici des extraits de code:
@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;
}
Maintenant, la question est que partout où, quand et je vais mesure/redimensionne la vue mCardCorrect, le résultat est le même: il sera mesuré jusqu'au titre de la carte, comme si les éléments enfants de ConstraintLayout n'existaient pas. Comme ceci:
J'ai essayé de poster des mesures/redimensionnement à un Runnable comme ici: FrameLayout child view not updating correctly on resize , et en utilisant OnGlobalLayoutListener comme ici: Android: set view height via ViewTreeObserver . Je suis toujours un newb Android et c'est mon premier projet, donc toute aide sera grandement appréciée. Merci!