Java 更新视图';添加子项后的s维度
我有一个Java 更新视图';添加子项后的s维度,java,android,view,android-relativelayout,android-constraintlayout,Java,Android,View,Android Relativelayout,Android Constraintlayout,我有一个RelativeLayout和一个ConstraintLayout(还有一些其他的东西),我通过编程的方式用孩子们填充它。初始化所有子视图后,我很难调整父视图的大小 基本上,我想要实现的是: 以下是代码片段: @BindView(R.id.session_summary_items_include_correct) View mCardCorrect; //... @Override public View onCreateView(LayoutInflater inflater
RelativeLayout
和一个ConstraintLayout
(还有一些其他的东西),我通过编程的方式用孩子们填充它。初始化所有子视图后,我很难调整父视图的大小
基本上,我想要实现的是:
以下是代码片段:
@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;
}
@BindView(R.id.session\u summary\u items\u include\u correct)查看mCardCorrect;
//...
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u session\u summary\u items,container,false);
ButterKnife.bind(这个,视图);
correctCard=新包含的卡();
ButterKnife.bind(correctCard,mCardCorrect);
初始化视图();
post(()->resizeView(mCardCorrect));
返回视图;
}
private void initializeViews(){
ArrayList items=MyClass.GetItems();
LayoutInflater LayoutInflater=(LayoutInflater)getActivity().getApplicationContext()
.getSystemService(上下文布局\充气机\服务);
如果(items.size()>0){
correctCard.mCardTitle.setText(“正确的卡片”);
ArrayList视图=GetItemView(items,LayoutFlater);
PopulateLayoutWithitemView(correctCard.mConstraintLayout,视图);
}
}
私有ArrayList GetItemView(ArrayList项、布局、充气器){
ArrayList结果=新建ArrayList();
对于(MyClass项目:项目){
视图=充气机。充气(R.layout.item_视图,空);
TextView mTextTitle=(TextView)view.findViewById(R.id.item\u view\u title);
mTextTitle.setText(item.getTitle());
结果。添加(视图);
}
返回结果;
}
私有void populateLayoutWithitemView(ConstraintLayout布局、ArrayList项){
ConstraintSet ConstraintSet=新ConstraintSet();
constraintSet.clone(布局);
对于(int idx=0;idx
现在的问题是,无论何时何地,无论我如何测量/调整mCardCorrect视图,结果都是一样的:它将被测量到卡片标题,就好像ConstraintLayout中的子项不存在一样。像这样:
我尝试过将度量/大小调整为可运行的,如此处:,并使用OnGlobalLayoutListener,如此处:。我还是一个Android新手,这是我的第一个项目,所以任何帮助都将不胜感激。谢谢 您需要约束每个视图。发件人: 。。。如果在设备上运行布局时视图没有约束,则在位置[0,0](左上角)绘制视图 您添加的所有视图都不受约束,因此它们都在(0,0)处相互重叠
看起来您正确设置了
约束集
,只需使用约束集
添加约束即可。网上有一些很好的教程演示了如何做到这一点。这是一个。您还可以参考。您需要约束每个视图。发件人:
。。。如果在设备上运行布局时视图没有约束,则在位置[0,0](左上角)绘制视图
您添加的所有视图都不受约束,因此它们都在(0,0)处相互重叠
看起来您正确设置了约束集
,只需使用约束集
添加约束即可。网上有一些很好的教程演示了如何做到这一点。这是一个。您也可以参考