情况:
[x]列表项/切换标题
[]列表项/切换标题
如何根据第一个列表项的复选框动态地更改其高度?
(如果选中此复选框,则会打开一个子列表)
那我该如何通过编码更改约束布局的高度?
PS:我正在使用AndroidStudio 3.2
答案 0 :(得分:1)
您不需要动态更改高度。只需将子列表放在如LinearLayout之类的ViewGroup中,并在复选框更改时在View.VISIBLE
和View.GONE
之间切换可见性即可。
答案 1 :(得分:0)
您可以使用以下代码更改高度或宽度 每个视图:
private void changeIncludes (View newView ){
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
// change width and height to 50
params.height = 50 ;
params.width = 50;
newView.setLayoutParams(params);
}
或从其他视图尺寸使用:
private void changeIncludes (View current , View newView ){
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
params.height = current.getLayoutParams().height;
params.width = current.getLayoutParams().width;
newView.setLayoutParams(params);
}
如果宽度或高度不变,则应刷新页面。
此代码对我有用,我希望对您也有用。
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
changeIncludes(buttonView,50,100);
}else{
changeIncludes(buttonView,30,100);
}
}
});
private void changeIncludes (View newView , int h , int w){
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) newView.getLayoutParams();
// change width and height to 50
params.height = h ;
params.width = w;
newView.setLayoutParams(params);
}
我将此代码用于复选框,但是如果要用于列表项,则只需更改侦听器和接口。
答案 2 :(得分:0)
根据您使用的ViewGroup
类型,您可以根据检查内容设置这些组的可见性。
例如,如果您使用的是ConstraintLayout
,那么您会得到一个非常方便的android.support.constraint.Group
。在这种情况下,
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="sub_list_item_1,sub_list_item_2" />
然后,当您检测到复选框交互时,设置它的可见性(View.Visible
或View.GONE
)。
Group group1 = findViewById(R.id.group)
group1.setVisibility(View.GONE)