RelativeLayout
にはConstraintLayout
(それ以外はいくつかあります)があり、これはプログラムで子どもを配置しています。すべての子ビューを初期化した後、親のサイズを変更するのが苦労しています。RelativeLayout
子を追加した後にビューのサイズを更新します。
基本的に私が達成しようとしている何がこの次のとおりです。ここで
コードスニペットです:
@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 Viewを測定/サイズ変更すると、結果は同じです:ConstraintLayout内の子アイテムが存在しないかのように、カードタイトルまで測定されます。このように:FrameLayout child view not updating correctly on resize 、ここのようなOnGlobalLayoutListener使用:
私はここのようなのRunnableにリサイズ/測定を投稿しようとしましたAndroid: set view height via ViewTreeObserver 。私はまだAndroidのnewbです。これは私の最初のプロジェクトです。どんな助けでも大歓迎です。ありがとう!